「プロジェクトオイラー問い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); }
#include<stdio.h> const int up=2540160; int G[up+1]={0}; int facts[]={1,1,2,6,24,120,720,5040,40320,362880}; int calc(int n){ int re=0; while(n!=0){ re+=facts[n%10]; n/=10; } return re; } int saiki(int deep,int num){ if(deep==60){ return num; } if(G[num]==0)return 0; int t=G[num]; G[num]=0; int re=saiki(deep+1,t); G[num]=t; return re; } int main(){ for(int i=1;i<up;i++){ G[i]=calc(i); } int ans=0; for(int i=1;i<1000*1000;i++){ int re=saiki(0,i); if(re!=0){ ans++; } } printf("%d",ans); }
#include<stdio.h> const int up=150*10000; int memo[up]; int gcd ( int a, int b ){ int c; while ( a != 0 ) { c = a; a = b%a; b = c; } return b; } int main(){ for(int m=2;(m*m+1*1)+(2*m*1)+(m*m-1*1)<up;m++){ for(int n=1;n<m;n++){ if(gcd(n,m)!=1||(m-n)%2==0)continue; int L=(m*m+n*n)+(2*m*n)+(m*m-n*n); int add=L; while(L<up){ memo[L]++; L+=add; } } } int ans=0; for(int i=1;i<up;i++){ ans+=(memo[i]==1); } printf("%d",ans); }
#include<stdio.h> int main(){ int memo[101]={0}; memo[0]=1; for(int i=1;i<100;i++){ for(int j=0;j<=100-i;j++){ memo[j+i]+=memo[j]; } } printf("%d",memo[100]); }
#include<stdio.h> #include<vector> #include<algorithm> const int up=100; std::vector<int> sosuu; bool so[up+1]; __int64 memo[up+1]={0}; void setSo(){ int i2; memset(so,true,sizeof(so)); so[0]=so[1]=false; for(int i=4;i<=up;i+=2)so[i]=false; sosuu.push_back(2); for(int i=3;i<=up;i+=2){ if(so[i]==false)continue; sosuu.push_back(i); i2=i*2; for(int j=i*3;j<=up;j+=i2){ so[j]=false; } } } int main(){ setSo(); memo[0]=1; int ans=up+1; for(int i=0;i<sosuu.size();i++){ int p=sosuu[i]; for(int j=0;j<=up-p;j++){ memo[j+p]+=memo[j]; if(memo[j+p]>=5000){ if(ans>j+p)ans=j+p; memo[j+p]=5000; } } } printf("%d",ans); }