Project Euler Problem 134
解法
Modの世界での方程式を立てて解く.
例えば19,23なら100x+19≡0(MOD 23)となる.
実装(C++)
tools.hについてはgithub参照
#include <iostream> #include <ctime> #include <iomanip> #include <algorithm> #include <vector> #include "tools.h" using namespace std; long calc(int p1,int p2){ long q=1;; while(q<p1)q*=10; long a=q%p2; long b=(p2-p1)%p2; long r=mod_inverse(a,p2); return q*((b*r)%p2)+p1; } long solve(){ long sum=0; vector<int> primes=prime_list(1010000); for(int i=0;i<(int)primes.size();i++){ if(primes[i]>=5&&primes[i]<=1000000){ sum+=calc(primes[i],primes[i+1]); cout<<calc(primes[i],primes[i+1])<<endl; } } return sum; } int main(){ clock_t start; start=clock(); cout<<"---"<<endl<<"Answer:"<<solve()<<endl; cout<<"Calculation Time:"<<(clock()-start)/(double)CLOCKS_PER_SEC<<endl; }