「プロジェクトオイラー問い21~30」の編集履歴(バックアップ)一覧に戻る
#include<stdio.h> const int up=10000; int memo[up+1]={0}; void setYakusuu(){ for(int i=1;i<=up;i++){ for(int j=2*i;j<=up;j+=i){ memo[j]+=i; } } } int main(){ setYakusuu(); int d,ans=0; for(int i=2;i<up;i++){ d=memo[i]; if(d<up&&memo[d]==i&&d!=i){ printf("%d %d\n",d,i); ans+=i; } } printf("%d",ans); }
#include<stdio.h> #include<stdlib.h> #include<vector> #include<string> #include<algorithm> int main(){ FILE *fp; char name[256],c; std::string strName; if((fp=fopen("euler22Data.txt","r"))==NULL){ printf("file open Error"); exit(EXIT_FAILURE); } std::vector<std::string> names; while(1){ fscanf(fp,"\"%[^\"]\"",name); names.push_back(name); if(fscanf(fp,"%c",&c)==EOF)break; } std::sort(names.begin(),names.end()); int ans=0; for(int i=0;i<names.size();i++){ strName=names[i]; int sum=0; for(int j=0;j<strName.size();j++){ sum+=strName[j]-'A'+1; } ans+=sum*(i+1); } fclose(fp); printf("%d",ans); }
#include<stdio.h> #include<stdio.h> #include<vector> #include<time.h> const int up=28123; int memo[up+1]={0}; std::vector<int> kazyou; void setKazyousuu(){ for(int i=1;i<=up;i++){ if(i<memo[i]){ kazyou.push_back(i); memo[i]=-1; } for(int j=2*i;j<=up;j+=i){ memo[j]+=i; } } } int main(){ double start=clock(); setKazyousuu(); int k,ans=0; for(int i=1;i<up;i++){ bool ok=true; for(int j=0;j<kazyou.size()&&2*kazyou[j]<=i;j++){ if(memo[i-kazyou[j]]==-1){ ok=false; break; } } if(ok==true){ //printf("%d ",i); ans+=i; } } printf("\nans=%d %lf",ans,clock()-start); }
#include<stdio.h> int base[11]={0,362880,40320,5040,720,120,24,6,2,1,1}; int main(){ int no=1000*1000-1; bool spents[10]; for(int i=0;i<10;i++)spents[i]=false; for(int i=1;i<11;i++){ int p=no/base[i]+1; int count=0,j; for(j=0;j<10;j++){ count+=!spents[j]; if(count>=p)break; } //2783915460 spents[j]=true; printf("%d",j); no=no%base[i]; } }