JZOJ 1164.求和
来源:互联网 发布:征兵心理测试软件 编辑:程序博客网 时间:2024/05/14 18:05
Description
给出一个正整数N(1<=2^31-1),求1~N中与N互质的数的总和。
Sample Input
10
Sample Output
20
Solution
介绍欧拉函数
φ(n)表示是小于或等于n的正整数中与n互质的数的数目。
φ(n)=n(1-1/p1)(1-1/p2)(1-1/p3)….(1-1/pn)其中p1, p2,p3……pn为n的所有质因数(且每种质数只有一个),n≠0.
证明
若n=πp^ap(p|n)(ap表示质因数p的指数,p|n表示p能被a整除)
则φ(n)=π(p-1)p^(ap-1)=nπ(1-1/p)
对任何两个互质的正整数a, m(m>=2)有a^φ(m)≡1(mod m)即欧拉定理。
当m是质数p时,a^(p-1)≡1(mod m) 即费马小定理。
欧拉函数代码
function phi(n:longint):longint;begin ans:=n; p:=1; while (p*p<=n) do begin inc(p); if n mod p=0 then begin ans:=ans div p*(p-1); while n mod p=0 do n:=n div p; end; end; if n>1 then ans:=ans div n*(n-1);end;
其实别人还有比我的这个代码更加优的,我打算去学习别人的方法,但这串代码保证AC。
至于答案sum=φ(n)*n/2
Code
var i,j,k,l,n,m,t,s,p,ans:longint;begin readln(n); k:=n; ans:=n; p:=1; while (p*p<=k) do begin inc(p); if k mod p=0 then begin ans:=ans div p*(p-1); while k mod p=0 do k:=k div p; end; end; if k>1 then ans:=ans div k*(k-1); writeln(ans*n div 2);end.
看来要好好学习一下数论了。
——2016.2.17
4 0
- JZOJ 1164.求和
- 【汕头市选2012初中组】求和(sum)(jzoj)
- JZOJ __Day 3:【NOIP普及模拟】求和(sum)
- JZOJ 3.25 1420——【汕头市选2012初中组】求和(sum)
- 求和
- 求和。
- 求和
- 求和
- 求和
- 求和
- 求和
- 求和
- 求和
- 求和
- 求和
- 求和
- 求和
- 求和
- HDU 2141 Can you find it?
- String
- POJ 3279反转问题,dp
- http 的post与get区别与联系,实践中怎么选择
- Pch文件的主要作用 和分类Category的作用
- JZOJ 1164.求和
- 深入理解Java的接口和抽象类
- XML解析
- C#之接口项目
- matlab坐标轴axes对象句柄消失的解决办法
- PHP的异常处理机制
- 必须掌握的八种排序(5-6)--冒泡排序,快速排序
- 查询oracle表的信息(表,字段,约束,索引)
- 对UIView、UIWindow和CALayer的理解