由NEFU 519引发的思考(关于逆元)
2017-05-24 14:30
267 查看
兴安黑熊在高中学习数学时,曾经知道这样一个公式: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
3 4 100
Sample Output
14 30 1005
题意简单清晰,思路也很明了,一个快速幂,注意逆元就行了,问题就出在这个逆元上。
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; }
相关文章推荐
- 由NEFU 519引发的思考(关于逆元)
- 关于性开放引发的一些思考
- 关于性能测试方法而引发的思考(一)
- 关于一个MSS值引发的疑案的思考
- 一个Tahoma字体bug引发的思考—关于样式bug的分析流程
- 由OUI-10035和OUI-10033错误引发的关于oraInventory目录位置的思考
- 关于中国信息化产业的发展,引发的个人思考!
- review引发的有关于单例模式的思考
- [赏析]stack overflow引发的关于获取知识的思考
- 关于员工离职引发的思考
- 一道关于静态构造函数与抽象类构造函数的面试题引发的思考
- 一个批量更新的sql语句引发的关于创业者心态的思考
- 由java.lang.OutOfMemoryError:java heap space引发的关于JVM优化的思考
- 关于员工离职引发的思考
- 由一道PHP笔试题引发的思考(关于php5的Iterator接口)
- 回帖整理: 关于TDD引发的流行方法的思考
- 关于员工离职引发的思考
- 由无名对象(临时对象)引发的关于“引用”的思考
- 由一个简单的客户端间TCP/UDP通信程序引发的关于设计模式的思考
- 一次代码review引发的关于单例模式的思考