Sum nyoj 欧拉定理简单运用(数论入门)
2014-10-13 19:47
363 查看
Sum
时间限制:1000 ms | 内存限制:65535 KB难度:3
描述
给你一个数N,使得在1~N之间能够找到x使得x满足gcd( x , N ) >= M,
求解gcd(x,N)的和
输入多组测试数据
每行输出两个数N,M(N,M不超int)
输出输出sum
样例输入
5 3
样例输出
5
上传者
ACM_张书军
欧拉定理:
欧拉定理表明,若n,a为正整数,且n,a互质;gcd(n,a)=1;
觉得维基百科比百度讲解得好些(逃了一天的课 就看了zsj的数论基础-╮(╯▽╰)╭)
http://baike.baidu.com/view/48903.htm?fr=aladdin
http://zh.wikipedia.org/wiki/%E6%AC%A7%E6%8B%89%E5%AE%9A%E7%90%86_(%E6%95%B0%E8%AE%BA)
/*在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。*/ /*思路:枚举n的因子。 假设n的因子为d。d*gcd(x/d,n/d)=1。 d*Euler(n/d)就是因子为gcd(x,n)=d,从而求gcd(x,n)的和。*/ #include<stdio.h> #include<string.h> #include<iostream> using namespace std; long long Euler(long long n)//欧拉函数 { long long c=n,i; for(i=2;i*i<=n;i++) { if(n%i==0) { while(n%i==0) n/=i; c=c/i*(i-1);//φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn); } } if(n!=1) c=c/n*(n-1); return c; } int main() { long long a,b; while(cin>>a>>b) { int cnt; long long i,c=0; for(i=1;i*i<=a;i++) { if(a%i==0) { if(i>=b) { cnt=i;//- - c=c+cnt*Euler(a/cnt); } if(i*i!=a&&a/i>=b)//枚举i与n的因子。 { cnt=a/i; c=c+cnt*Euler(a/cnt); } } } cout<<c<<endl; } }
相关文章推荐
- GCD nyoj1007(欧拉函数运用&&数论入门)
- NYOJ--290--动物统计加强版(字典树简单运用)
- HDOJ,数论简单入门题目,杭电1262,寻找素数对
- 【python新手入门】一个python List 的简单运用 -----班级学生管理系统
- Flume 入门与简单运用
- redis简单运用,数据类型,适合入门
- 在jsp中运用ajax(简单入门)
- POJ 1845 Sumdiv 简单数论问题
- nyoj 998(欧拉定理的运用)
- 数论——nyoj_330, xyoj1984一个简单的数学题
- ps消失点滤镜的运用方法以及简单新手入门教程
- NYOJ144 小珂的苦恼(扩展gcd的简单运用)
- SUM 大数取余 欧拉定理 二项展开 数论
- nyoj 998 Sum 【欧拉函数运用】
- DELPHI入门3--最简单的数据库连接,运用
- ACM 数论 扩展欧几里得算法 简单应用 NYOJ 144 小珂的苦恼
- 8、面向对象以及winform的简单运用(事件与winform入门)
- POJ2739:Sum of Consecutive Prime Numbers(简单数论)
- 在jsp中运用ajax(简单入门)
- Android之dagger2的简单运用和详细解读(入门)