Project Euler Homework
|
00001 #include <iostream> 00002 using namespace std; 00003 typedef unsigned long long verylong; 00004 00005 const verylong ten = 1e10; 00006 00007 verylong pow2(unsigned p,verylong r) 00008 { 00009 //reverse index 00010 unsigned q=1; 00011 for(;p>0;p>>=1){ 00012 q<<=1; 00013 q+=p&1; 00014 } 00015 00016 //cout << q << endl; 00017 verylong prod=1; 00018 for(;q>1;q>>=1){ 00019 prod=(prod*(prod/100000)%r*100000+prod*(prod%100000)%r)%r; //prod*=prod 00020 if(q&1)prod=(prod<<1)%r; //prod*=2 00021 } 00022 return prod; 00023 } 00024 00025 int main() 00026 { 00027 cout << (28433*pow2(7830457,ten))%ten+1 <<endl; 00028 return 0; 00029 }