【jzoj4919】【神炎皇】【数论】
来源:互联网 发布:游戏视频录制软件 编辑:程序博客网 时间:2024/06/05 03:40
题目大意
对于一个整数对(a,b),若满足a+b<=n且a+b是ab的因子,则成为神奇的数对。请问这样的数对共有多少呢?
解题思路
设gcd(a,b)=k,a’=a/k,b’=b/k。
a+b<=n&&a+b|ab=>(a’+b’)k<=n&&(a’+b’)k|a’b’k^2。
gcd(a’,b’)=1=>gcd(a’+b’,a’)=gcd(a’+b’,b’)=1=>gcd(a’+b’,a’b’)=1=>(a’+b’)|k。
(a’+b’)k<=n,(a’+b’)|k=>k<=sqrt(n),合法的k有n/k/k个。
对于合法的k,a’,b’的组合数只有phi(k)个。
当gcd(a’,k)=1时,gcd(a’,k-a’)=1=>gcd(a’,b’)=1。
当gcd(a’,k)!=1时,gcd(a’,k-a’)!=1=>gcd(a’,b’)!=1。
所以只需枚举k,统计答案即可,phi要用线性筛法求。
code
#include<cmath>#include<cstdio>#include<algorithm>#define LL long long#define min(a,b) ((a<b)?a:b)#define max(a,b) ((a>b)?a:b)#define fo(i,j,k) for(int i=j;i<=k;i++)#define fd(i,j,k) for(int i=j;i>=k;i--)using namespace std;int const maxn=1e7;LL n;int p[maxn],phi[maxn+10];int main(){ //freopen("uria.in","r",stdin); //freopen("uria.out","w",stdout); freopen("d.in","r",stdin); freopen("d.out","w",stdout); scanf("%lld",&n); LL ans=0;int mx=sqrt(n); phi[1]=1; fo(i,2,mx){ if(!phi[i])p[++p[0]]=i,phi[i]=i-1; fo(j,1,p[0]){ if(i*p[j]>mx)break; if(i%p[j]==0){phi[i*p[j]]=phi[i]*p[j];break;} phi[i*p[j]]=phi[i]*(p[j]-1); } } fo(k,2,mx) ans+=n/k/k*phi[k]; printf("%lld",ans); return 0;}
0 0
- 【jzoj4919】【神炎皇】【数论】
- jzoj4919 神炎皇
- [JZOJ4919] 神炎皇
- 【JZOJ4919】神炎皇
- JZOJ4919. 神炎皇
- JZOJ4919. 【NOIP2017提高组模拟12.10】神炎皇
- 【JZOJ4919】【NOIP2017提高组模拟12.10】神炎皇
- 数论
- 数论
- 数论
- 数论
- 数论
- 数论
- 数论
- 数论
- 数论
- 数论
- 数论
- Kotlin-泛型
- [Java面试十一]数据库总结.
- Some Common Tasks in Task Order
- 第一个程序
- struts2中action向jsp中传值的方法
- 【jzoj4919】【神炎皇】【数论】
- [Java面试十二]数据库概念相关
- 字符串方法总结
- 兄弟连HTML5——09.canvas实例2——太阳系2.html
- 文件综合应用-配置文件的读写修改
- [Mac OS X] 如何在终端查看 Mac OS 版本信息
- C++中RTTI与dynamic_cast
- [Java面试三]JavaWeb基础知识总结.
- JavaScript childNodes attributes