由NEFU 519引发的思考(关于逆元)
来源:互联网 发布:加群软件 编辑:程序博客网 时间:2024/06/09 01:06
兴安黑熊在高中学习数学时,曾经知道这样一个公式:f(n)=1^2+2^2+3^2+.......+n^2,这个公式是可以化简的,化简后的结果是啥它却忘记了,也许刚上大二的你能记得。现在的问题是想要计算f(n)对1007取余的值,你能帮帮他吗?
Input
输入数据有多组,每组一个数n. (1<=n <=1,000,000,000).
Output
输出f(n)对1007取余的值。
Sample Input
34100
Sample Output
14301005
题意简单清晰,思路也很明了,一个快速幂,注意逆元就行了,问题就出在这个逆元上。
1007这个数,它不是素数。1007=19 X 53。
下面就涉及到求逆元的方法。
当MOD为素数时,a的逆元为a^(MOD-2)%MOD,一个快速幂完事了
当MOD不是素数时,a的逆元为a^(phi(MOD)-1)%MOD,phi()是欧拉函数,也是快速幂
差点忘了说公式,汗!!!
F(n)=n*(n+1)*(2*n+1)/6;
#include <iostream>using namespace std;typedef long long LL;const LL MOD=1007;int phi(int n){ int i,rea=n; for(i=2;i*i<=n;i++) { if(n%i==0) { rea=rea-rea/i; while(n%i==0)n/=i; } } if(n>1) rea=rea-rea/n; return rea;}LL quickpow(LL m,LL n){ LL b=1; while(n>0) { if(n&1)b=(b*m)%MOD; n=n>>1; m=(m*m)%MOD; }return b;}int main(){ LL n; while(cin>>n) { LL ans=(((n%MOD*(n+1)%MOD)%MOD*(2*n%MOD+1)%MOD)*quickpow(6,phi(MOD)-1))%MOD; cout<<ans<<endl; } return 0;}
阅读全文
0 0
- 由NEFU 519引发的思考(关于逆元)
- 由IsPostBack引发的思考(续)
- 由英语presentation引发的关于PPT制作的思考
- 由一段程序引发关于对象的思考
- 由InvocationTargetException引发的思考
- 由BigDecimal引发的思考
- 由IsPostBack引发的思考
- 由InvocationTargetException引发的思考
- 由B2C引发的思考
- 由cursor引发的思考
- 由size_t引发的思考
- 由volatile引发的思考
- 由一道PHP笔试题引发的思考(关于php5的Iterator接口)
- 由博客评论引发的思考和实践(关于搜狗输入法)
- 由getchar()函数的使用而引发的思考.
- 由一个线程例子引发的思考(转载)
- 由一道面试题引发的思考
- 由一个问题引发的思考
- C#写好的类库dll怎么在别人调用的时候也能看到注释?
- CNoTrackObject* CThreadLocalObject::GetData( CNoTrackObject* (AFXAPI* pfnCreateObject)())
- 汇编语言: 编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,
- 算法导论程序15-计数排序(Python)
- 32.七-fixtures
- 由NEFU 519引发的思考(关于逆元)
- java分布式服务框架Dubbo的介绍与使用
- 视频算法符号,视频算术符号,视频标准缩写,各种视频知识
- 03 OrangePi 内核编译
- 汇编语言: 从键盘上输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,
- Mac中Android Studio的SVN使用详解
- java代码规范
- 农村女孩高中才接触电脑,却成为程序媛的心路历程
- CAN 帧ID 与J1939 PGN 转换例子