「オイラープロジェクト201~210」の編集履歴(バックアップ)一覧に戻る
#include<stdio.h> #include<vector> #include<algorithm> const int up=100; const int up2=10000000; std::vector<int> sosuu; bool so[up+1]; bool okMemo[up2+1]; 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; } } } bool isOK(const int n){ int a=n; bool ans=false,stop=false; for(int i=0;i<sosuu.size();i++){ while(a%sosuu[i]==0){ a/=sosuu[i]; if(up2>a){ ans=okMemo[a]; stop=true; break; } } if(stop==true)break; } if(up2>n)okMemo[n]=ans; return ans; } int main(){ setSo(); okMemo[1]=okMemo[2]=true; int ans=2; for(int i=3;i<=1000000000;i++){ ans+=isOK(i); } printf("%d",ans); }
#include<stdio.h> #include<vector> #include<algorithm> const int up=100; const int up2=1000000000; std::vector<int> sosuu; bool so[up+1]; int ans=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; } } } void saiki(int p,__int64 num){ if(num>up2)return; ans++; for(int i=p;i<sosuu.size();i++){ saiki(i,num*sosuu[i]); } } int main(){ setSo(); saiki(0,1); printf("%d",ans); }
#include<stdio.h> #include<string.h> int main(){ double memo4[37]={0},memo6[37]={0},next4[37],next6[37]; memo4[0]=memo6[0]=1; for(int i=0;i<9;i++){ memset(next4,0,sizeof(next4)); for(int i=0;i<37;i++){ for(int j=1;j<5&&i>=j;j++){ next4[i]+=memo4[i-j]; } } memcpy(memo4,next4,sizeof(next4)); } for(int i=0;i<6;i++){ memset(next6,0,sizeof(next6)); for(int i=0;i<37;i++){ for(int j=1;j<7&&i>=j;j++){ next6[i]+=memo6[i-j]; } } memcpy(memo6,next6,sizeof(next6)); } double sum4=0,sum6=0,ans=0; for(int i=0;i<=36;i++){ sum4+=memo4[36-i]; memo4[36-i]=sum4; sum6+=memo6[i]; } for(int i=0;i<36;i++){ ans+=memo4[i+1]*memo6[i]; } ans=(ans/sum4)/sum6; printf("%.7lf",ans); }