UVA 11426 欧拉函数
2014-07-17 16:45
211 查看
题目链接 http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=26&problem=2421&mosmsg=Submission+received+with+ID+13896421
题意:给出n,求sum(gcd(i,j)),1<=i<j<=n
题意:给出n,求sum(gcd(i,j)),1<=i<j<=n
/* f =gcd(1,n)+gcd(2,n)+gcd(3,n)+..+gcd(n-1.n),那么s =s[n-1]+f 用g[n,i]表示gcd(n,x)=i的个数,f =sum(i*g[n,i]),i是n的约数 gcd(n,x)=i,gcd(n/i,x/i)=1;所以g[n,i]=phi(n/i) 枚举i,对i的所有倍数j,f[j]+=i*phi[j/i] */ #include <iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<string> #define LL long long #define maxn 4000000 using namespace std; LL s[maxn+1],f[maxn+1],phi[maxn+1]; void phi_table(LL n){ for(LL i=2;i<=n;i++)phi[i]=0; phi[1]=1; for(LL i=2;i<=n;i++)if(!phi[i]) for(LL j=i;j<=n;j+=i){ if(!phi[j]) phi[j]=j; phi[j]=phi[j]/i*(i-1); } } void init(){ phi_table(maxn); for(LL i=1;i<=maxn;i++) for(LL n=i*2;n<=maxn;n+=i) f +=i*phi[n/i]; for(LL i=2;i<=maxn;i++) s[i]=s[i-1]+f[i]; } int main() { init(); LL n; while(cin>>n,n){ cout<<s <<endl; } return 0; }
相关文章推荐
- FZU 1969 && UVA 11426 GCD Extreme (欧拉函数 或 莫比乌斯反演)
- D - **GCD-Exreme(欧拉函数+数学分析,gcd转换) UVA - 11426
- UVA - 11426 GCD - Extreme (II) (欧拉函数)
- UVALive5964 LCM Extreme && UVA11426 GCD - Extreme (II) 欧拉函数筛法
- UVA 11426 (欧拉函数)
- UVa 11426 GCD - Extreme (II) / 素数筛选 + 欧拉函数
- UVA 11426 GCD - Extreme (II)(神TM GCD大法,欧拉函数)
- UVA 11426 GCD - Extreme (II) (数论|欧拉函数)
- UVA 11426 GCD - Extreme (II) (欧拉函数)
- UVA-11426 GCD - Extreme (II) 欧拉函数
- 欧拉函数,筛法(最大公约数之和——极限版II,UVA 11426)
- UVA - 11426 GCD - Extreme (II) gcd思维+巧用欧拉函数
- uva 11424 && 11426 GCD - Extreme(数论:欧拉函数)
- UVA 11426 GCD Extreme (II) 欧拉函数
- GCD - Extreme (II) UVA - 11426 (数论,gcd,欧拉函数)题解
- UVA 11426 GCD - Extreme (II)(欧拉函数打表 + 规律)
- UVa 11426 GCD - Extreme (II) (欧拉函数应用·O(N*logN))
- UVA 11426 GCD - Extreme (II)(欧拉函数)
- UVA 11426 GCD - Extreme (II) (欧拉函数+筛法)
- uva 11426 线性欧拉函数筛选+递推