Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
用一种快速幂模法很简单#include<iostream> using namespace std; /*__int64 Montgomery(__int64 n, __int64 p, __int64 m) { // 快速计算 (n ^ p) % m 的值,与power算法极类似 __int64 r = n % m; // 这里的r可不能省 __int64 k = 1; while (p > 1) { if ((p & 1)!=0) { k = (k * r) % m; // 直接取模 } r = (r * r) % m; // 同上 p /= 2; } return (r * k) % m; // 还是同上 }*///这是先前的版本 void fen(int r[][2],int k[][2]) { int ans[2][2]; ans[0][0]=(r[0][0]*k[0][0]%10000+r[0][1]*k[1][0]%10000)%10000; ans[0][1]=(r[0][0]*k[0][1]%10000+r[0][1]*k[1][1]%10000)%10000; ans[1][0]=(r[1][0]*k[0][0]%10000+r[1][1]*k[1][0]%10000)%10000; ans[1][1]=(r[1][0]*k[0][1]%10000+r[1][1]*k[1][1]%10000)%10000; r[0][0]=ans[0][0],r[0][1]=ans[0][1],r[1][0]=ans[1][0],r[1][1]=ans[1][1]; } int fbnq(int num) { int k[2][2]={1,0,0,1}; int r[2][2]={1,1,1,0}; while(num>1) { if((num&1)!=0) { fen(k,r); } fen(r,r); num/=2; } fen(r,k); return r[0][1]; }//仿照他写的版本 int main() { int num; while(cin>>num&&num!=-1) { if(num==0) cout<<0<<endl; else cout<<fbnq(num)<<endl; } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator