test 8 Problem A: [noip2016十连测第八场]神炎皇 (数论+gcd两个性质的证明)
来源:互联网 发布:剑灵人女捏脸数据分享 编辑:程序博客网 时间:2024/06/04 19:43
传送门
题解:数论。
我们要求(a+b)|ab 的个数。首先考虑枚举gcd(a,b)=d ,则必须满足(a'+b')d|a'*b'*d^2 ,那么(a'+b')|a'*b'*d,因为(a'+b')与a'b'互质,所以(a'+b')|d.
那么在保证gcd(a,b)==1的情况下,(a+b)为什么与ab互质呢?
反证法: 假设(a+b)与ab 不互质,那么gcd((a+b),ab)==m (m!=1)
则有m|ab,(m|a)||(m|b)
假设m|a,又因为 m|(a+b) ,所以m|b.也就是(a,b)必然存在一个质因子p.
与gcd(a,p)=1矛盾,所以 gcd(a,b)==1,gcd(a+b,ab)==1
又因为(a'+b')*d<=n,(a'+b')|d ,所以d=k1(a'+b') (k1>=1) ,所以 (a'+b')<=sqrt(n)
不妨枚举(a'+b')==k k*k*k1<=n k1<=n/(k^2) 则合法的d有n/(k^2)个,再考虑(a'+b')==k的(a',b')的个数,应该有phi(k)个。
为什么呢? 我们要求gcd(a',b')==1时(a',b')的个数。这时有一个结论gcd(a+b,b)==1,那么gcd(a,b)==1.
因为phi(k)正好就是gcd(a'+b',b)==1的个数,所以我们只需要证明上述的结论即可。
还是利用反证法。
当gcd(a+b,b)=1时,假设gcd(a,b)=m (m!=1)
那么a=pm ,b=qm (a+b)=(q+p)m 那么如果这样成立的话gcd(a+b,b)=m,与gcd(a+b,b)==1矛盾,所以得证。
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#define N 10000003#define LL long longusing namespace std;LL p[N],prime[N],phi[N];LL ans,n;int main(){scanf("%I64d",&n);LL m=sqrt(n);prime[1]=1;for (LL i=2;i<=m;i++) { if (!p[i]) prime[++prime[0]]=i,phi[i]=i-1;for (LL j=1;j<=prime[0];j++){if (prime[j]*i>m) break;p[i*prime[j]]=1;if (i%prime[j]==0) phi[i*prime[j]]=phi[i]*prime[j];else phi[i*prime[j]]=phi[i]*(prime[j]-1);}ans+=(n/i/i)*phi[i]; } printf("%I64d\n",ans);}
0 0
- test 8 Problem A: [noip2016十连测第八场]神炎皇 (数论+gcd两个性质的证明)
- test 7 Problem A: [noip2016十连测第七场]约瑟夫游戏 (找规律+数论)
- test 8 Problem B: [noip2016十连测第八场]降雷皇 (dp+线段树)
- test 8 Problem C: [noip2016十连测第八场]幻魔皇 (递推+乱搞)
- [BZOJbegin][noip2016十连测第八场]神炎皇(数学相关:gcd)
- 【bzoj 十连测】[noip2016十连测第八场]Problem A: 神炎皇(数学相关:线性筛)
- test 3 Problem A: [noip2016十连测第三场]平均数 (实数二分+排序+树状数组)
- Problem A: [noip2016十连测第五场]simple(模拟)
- 【bzoj 十连测】[noip2016第二场]Problem A. Divisors(暴力)
- 【bzoj 十连测】[noip2016十连测第八场]Problem C: 幻魔皇(递推)
- 【bzoj 十连测】[noip2016十连测第七场]Problem A: 约瑟夫游戏(递推+打表)
- [BZOJbegin][noip2016十连测第八场]降雷皇(dp+线段树)
- [BZOJbegin][noip2016十连测第八场]幻魔皇(dp)
- Problem B: [noip2016十连测第五场]walk (树形dp)
- Problem C: [noip2016十连测第五场]travel (贪心)
- HDU 5974 A Simple Math Problem 数论 gcd
- 傅里叶变换(CTFT)的性质及证明
- MST性质的证明
- Matlab打开AVI格式的视频并把每帧图片都读取出来
- JBOSS-eap-6.4.0增加oracle数据源
- ffmpeg-3.1.4最新版调用android mediacodec硬解编译脚本
- 可排列的最长公共子序列(Longest common subsequence with permutations allowed)
- 3-orcale中varchar2
- test 8 Problem A: [noip2016十连测第八场]神炎皇 (数论+gcd两个性质的证明)
- SylixOS C语言解释器
- glBlendFunc() opengl 混合
- 技术博客
- (cocos 笔记) 获取studio设计的UI控件
- 使用Jenkins配置Git+Maven的自动化构建
- Hrbust 1361 Leyni的机器人【dp】好题
- 正则表达式(/\d+/g,"")什么意思
- WEB前端 | JS基础——(7)DOM