【UVA 11426】 【求sum(gcd(i,j),1<=i<j<=n)1<n<4000001】
来源:互联网 发布:python 查看字节码 编辑:程序博客网 时间:2024/05/16 17:37
题意:
求sum(gcd(i,j),1<=i<j<=n)1<n<4000001
思路:
1.建立递推关系,s(n)=s(n-1)+gcd(1,n)+gcd(2,n)+……+gcd(n-1,n);
2.设f(n)=gcd(1,n)+gcd(2,n)+……+gcd(n-1,n)。
gcd(x,n)=i是n的约数(x<n),按照这个约数进行分类。设满足gcd(x,n)=i的约束有g(n,i)个,则有f(n)=sum(i*g(n,i))。
而gcd(x,n)=i等价于gcd(x/i,n/i)=1,因此g(n,i)等价于phi(n/i).phi(x)为欧拉函数。
3.降低时间复杂度。用筛法预处理phi[x]表
逆向思路用筛法预处理f(x)->枚举因数,更新其所有倍数求解。
代码:
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=4100000; ll f[maxn],s[maxn];ll phi[maxn];//储存结果void phi_table(int n){ memset(phi,0,sizeof(phi)); phi[1]=1;//首项为1 for(int i=2;i<=n;++i)if(!phi[i])//i必定为素数(类似筛素数法) for(int j=i;j<=n;j+=i)//不断枚举i的倍数 { if(!phi[j])phi[j]=j;//如果没有算过就初始化为j phi[j]=phi[j]/i*(i-1);//进行计算 }}int main(){ phi_table(maxn); memset(f,0,sizeof(f)); for(int i=1;i<=maxn;i++) for(int j=i+i;j<=maxn;j+=i)//最大公约数不能为本身 f[j]+=i*phi[j/i]; memset(s,0,sizeof(s)); s[1]=0; for(int i=2;i<=maxn;i++) s[i]=s[i-1]+f[i]; int n; while(scanf("%d",&n),n){ printf("%lld\n",s[n]); } return 0;}
1 0
- 【UVA 11426】 【求sum(gcd(i,j),1<=i<j<=n)1<n<4000001】
- n[i][j] <= n[i][j+1] n[i][j] <= n[i+1][j]
- UVA 11428 GCD - Extreme (II)(G=∑ ∑GCD(i, j)(1<=i<N,i+1<=j<=N,欧拉函数)
- 求gcd(i,j,k)=m的方案数,i,j,k不同且属于1-n(组合数学+筛法(倍数法))
- Codeforces Round #353 (Div. 2) E. Trains and Statistic(求d[i][j]的和的最小值(1<=i<=n,i+1<=j<=n))
- 一个数组a[0...n-1],求a[i]-a[j]的最大值,其中i>j
- 一个数组a[0...n-1],求a[j]-a[i]的最大值,其中i<j
- 已知一个正整数N, 且N = 2i + 2j + … + 2q ,求i, j, ... q的值
- reverse.c outData[i*N+j]=inData[j*M+i];
- [日常套路] Sum[i, j] = Sum[0, j]
- POJ 2480 Longge's problem [ 求 Σgcd(i,n)(1<=i<=n) ] [欧拉函数]
- i++ 和 i=i++和i=i+1和j=j++的细节问题
- 【51nod】1291 Farmer 【求n*m的矩形内全1的i*j的矩形个数】【dp】
- 求i从1到n的gcd(n,i)的和
- i += j ;与 i = i + j ; 的区别
- java i+=j 与 i = i+j 区别
- ZOJ 3435 Ideal Puzzle Bobble(gcd(i,j,k)=1/莫比乌斯反演)
- int i=1,j=2; int k=i+++j;
- 大山中学某模拟赛
- TabLayout实现每个tab有一个不同的图片,选中改变图片
- 1~n的整数中1的个数
- Git和SVN的区别
- day7_表单
- 【UVA 11426】 【求sum(gcd(i,j),1<=i<j<=n)1<n<4000001】
- 2016年9月23日19:49:33
- android studio设置成eclipse 快捷键后,平常经常用的快捷键
- 静态链接库与动态链接库
- 2000年分区联赛普级组之三 乘积最大
- 初入操作系统
- 关于Oracle net Manager中点击无法创建监听程序的解决方案
- 双栈排序
- oracle文档