「プロジェクトオイラー問い71~80」の編集履歴(バックアップ)一覧に戻る
#include<stdio.h> struct S{ int n,m; S operator+(const S& s){ S re; re.n=n+s.n; re.m=m+s.m; return re; } }; int main(){ S s1,s2,s3; s1.n=2; s1.m=5; s2.n=3; s2.m=7; while(1){ s3=s1+s2; if(s3.m>=1000*1000)break; s1=s3; } printf("%d",s1.n); }
#include<stdio.h> #include<iostream> const int up=1000000; int count[up+1]={0}; int dellCount[up+1]={0}; void print(){ for(int i=1;i<=up;i++){ printf("%d ",count[i]); } printf("\n"); } int main(){ for(int i=2;i<=up/2;i++){ if(dellCount[i]==0){ //printf("%d a=",i); int dell=-1; for(int j=i*2;j<=up;j+=i){ count[j]+=dell; dell--; dellCount[j]++; } }else if(dellCount[i]>0){ //printf("%d b=",i); int add=dellCount[i]-1; int base=add; for(int j=i*2;j<=up;j+=i){ count[j]+=base; base+=add; dellCount[j]-=add; } }else{ int add=-dellCount[i]+1; int base=add; for(int j=i*2;j<=up;j+=i){ count[j]+=base; base+=add; dellCount[j]-=add; } } //print(); } __int64 ans=0; for(int i=1;i<=up;i++){ ans+=i+count[i]-1; } std::cout<<ans; }
#include<stdio.h> int ans=0; struct S{ int n,m; S operator+(const S& s){ S re; re.n=n+s.n; re.m=m+s.m; return re; } }; void saiki(S s1,S s2,S s3){ if(s2.m>12000)return; ans++; saiki(s1,s1+s2,s2); saiki(s2,s2+s3,s3); } int main(){ S s1,s3; s1.n=s3.n=1; s1.m=2; s3.m=3; saiki(s1,s1+s3,s3); printf("%d",ans); }