Project Euler Homework

097.cpp

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 }
 All Classes Files Functions Variables