HDU3501 Calculation 2(欧拉函数)
2016-02-05 20:09
239 查看
题目求小于n不与n互质的正整数的和。
一个结论是小于n与n互质的正整数和=φ(n)*n/2。
因为如果a与n互质,那么n-a也与n互质,即若gcd(a,n)=1则gcd(n-a,n)=1,反证法即可证明。
也就是说小于n与n互质的数是成对的,且它们的和是n,共有φ(n)/2对。
所以小于n与n互质的正整数和=φ(n)*n/2。
一个结论是小于n与n互质的正整数和=φ(n)*n/2。
因为如果a与n互质,那么n-a也与n互质,即若gcd(a,n)=1则gcd(n-a,n)=1,反证法即可证明。
也就是说小于n与n互质的数是成对的,且它们的和是n,共有φ(n)/2对。
所以小于n与n互质的正整数和=φ(n)*n/2。
#include<cstdio> #include<cstring> using namespace std; int phi(int n){ int res=n; for(int i=2; i*i<=n; ++i){ if(n%i) continue; while(n%i==0) n/=i; res-=res/i; } if(n!=1) res-=res/n; return res; } int main(){ int n; while(~scanf("%d",&n) && n){ printf("%lld\n",((long long)n*(n-1)/2-(long long)n*phi(n)/2)%1000000007); } return 0; }
相关文章推荐
- 第一次在ubuntu配置apache+php+mysql环境运行laravel5.1
- 例题6-7 UVa122 Trees on the level(树&&队列BFS&&sscanf字符串转整数)
- shell 中的continue
- HDOJ 5606-tree【并查集】
- C# Tips:获得当前登录计算机的用户(本地用户/域用户)
- 自定义等高的cell(代码创建frame)
- Python lambda和reduce函数
- 应聘者页面——文本输入框及单选多视图重构
- 重定向操作(C语言)
- 使用Spring MVC统一异常处理实战
- Codeblosks用C++编写通用DLL供其他语言调用
- leetcode学习笔记5
- 【转载】光流法简单介绍
- 运行MIT-GNU Scheme出现“Requested allocation is too large”
- flush()
- Mybatis 中常用的java类型与jdbc类型
- C语言之memcpy函数
- HDOJ 2923 Einbahnstrasse (Floyed)
- Log4Net中配置文件的解释
- 手机端和电脑端判断代码