「プロジェクトオイラー問78」の編集履歴(バックアップ)一覧に戻る
#include<stdio.h> #include<vector> const int MOD=1000*1000; int main(){ std::vector<int> p; p.push_back(1); p.push_back(1); for(int i=2;;i++){ int d=1; int n=1; int add; int sum=0; while(1){ int a=(n*(3*n-1))/2; add= i>=a?p[i-a]:0; sum+=add*d; int b=(-n*(3*(-n)-1))/2; add=i>=b?p[i-b]:0; sum=(sum+add*d) % MOD; d*=-1; n++; if(i<b)break; } if(sum==0){ printf("%d\n",i); break; } p.push_back(sum); } }