博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 P1445 没占到1444的愤怒
阅读量:7052 次
发布时间:2019-06-28

本文共 1023 字,大约阅读时间需要 3 分钟。

不得不吐槽一句,这题出题人真的很逗
以下我copy一段别人的题解:

1/x+1/y=1/n!

先通分
(x+y)/xy=1/n!
再化整数
xy-(x+y)*n!=0
然后配平
(n!)^2-(x+y)*n!+xy=(n!)^2
最后
(x-n!)*(y-n!)=(n!)^2
然后我们发现x,y都要是正整数;
所以原题可以变为
A*B=(n!)^2;
当A*B为正整数的时候x,y显然也是正整数;然后我们考虑x的取值,显然,若一个质数p有k个,那么x可以取p^0,p^1….p^k
共(k+1)种情况
乘法原理乘起来就可以了
而且显然,x确定后,y必然也会被确定
那么我们先可以欧拉筛;
求出每个数的最小质因数然后大力就好了;

其实就是质因数分解,枚举约数个数

直接贴代码了:

#include
#include
#include
#include
#include
#include
#include
#include
#define ll long longusing namespace std;ll prime[500000];bool vis[1000001];ll n,cnt;void init(){ for(int i=2;i<=n;i++){ if(!vis[i]){ prime[++cnt]=i; } for(int j=1;j<=cnt&&(ll)i*(ll)prime[j]<=n;j++){ vis[i*prime[j]]=1; if(i%prime[j]==0)break; } }}int main(){ scanf("%lld",&n); init(); ll ans=1; for(int i=1;i<=cnt;i++){ ll c=0; for(ll j=prime[i];j<=n;j*=prime[i]){ c+=n/j; } ans*=(c*2+1); ans%=1000000007; } printf("%lld",ans); return 0;}

转载于:https://www.cnblogs.com/stone41123/p/7581248.html

你可能感兴趣的文章
ubuntu搭建nodejs生产环境——快速部署手册
查看>>
从零开始实现一个简易的Java MVC框架
查看>>
【java解惑】Unicode转义符的使用
查看>>
spring线程池ThreadPoolTaskExecutor与阻塞队列BlockingQueue
查看>>
visio图片导入word和PPT的最清晰的方式
查看>>
DataGuard 环境rman恢复主库坏块一例
查看>>
交换机真的只工作在第二层吗?
查看>>
15年编程生涯,资深架构师总结的7条经验
查看>>
echo命令
查看>>
图形语言 Kgo
查看>>
兄弟连第10节课
查看>>
调整Virtual Box硬盘大小
查看>>
Windows下Apache服务器中自动配置二级子域名
查看>>
Transform Map - Ignore Row if any fields are empty
查看>>
iEclipse-不只是Eclipse的开发者社区
查看>>
Oracle个人的一些记录
查看>>
20.分屏查看命令 less命令
查看>>
感谢付费客户不覺流年似水(271558528) 对C#ASP.NET通用权限管理组件的改进意见,已修正...
查看>>
android 让 TextView 自带滚动条
查看>>
win2003远程桌面不自动注销,自动锁定时间
查看>>