「オイラープロジェクト用ソースコード」の編集履歴(バックアップ)一覧はこちら

オイラープロジェクト用ソースコード」(2012/12/27 (木) 04:04:35) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

bcc5.5で64ビット整数を表示したりsprintf等で使う記号は%I64lld。 少し覚えにくい。 整数の各桁の和を求めるコード。 文字列に変換し文字列を一ケタずつ数字のlistに変えて最後に集計している。 (defun ketaSum(n) (apply #'+ (map 'list #'digit-char-p (princ-to-string n)))) とにかく素数がやたらと出てくるので素数を求めるテンプレ。 UP以下の素数を求め、それをテスト出力する。 #include<stdio.h> #include<vector> #include<algorithm> const int up=1000000; std::vector<int> sosuu; bool so[up+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; } } } int main(){ setSo(); for(int i=0;i<100;i++){ //printf("%d ",sosuu[i]); } } ファイ関数を求めるバージョン。 でかい数でも大丈夫なあたりdouble型ってよくできてるなと思う。 #include<stdio.h> #include<vector> #include<iostream> const int up=10000;//素数の上限 std::vector<int> sosuu; bool so[up+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; } } } __int64 phi(__int64 n){ double re=n; for(int i=0;i<sosuu.size()&&sosuu[i]*sosuu[i]<=n;i++){ __int64 p=sosuu[i]; int count=0; while(n%p==0){ n/=p; count++; } if(count>0)re*=(1-1.0/p); } if(n!=1)re*=(1-1.0/n); return (__int64)re+0.5; } int main(){ setSo(); for(int i=1;i<100;i++){ std::cout<<"("<<phi(i)<<")"; } }
bcc5.5で64ビット整数を表示したりsprintf等で使う記号は%I64lld。 少し覚えにくい。 整数の各桁の和を求めるコード。 文字列に変換し文字列を一ケタずつ数字のlistに変えて最後に集計している。 (defun ketaSum(n) (apply #'+ (map 'list #'digit-char-p (princ-to-string n)))) とにかく素数がやたらと出てくるので素数を求めるテンプレ。 UP以下の素数を求め、それをテスト出力する。 #include<stdio.h> #include<vector> #include<algorithm> const int up=1000000; std::vector<int> sosuu; bool so[up+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; } } } int main(){ setSo(); for(int i=0;i<100;i++){ //printf("%d ",sosuu[i]); } } ファイ関数を求めるバージョン。 でかい数でも大丈夫なあたりdouble型ってよくできてるなと思う。 #include<stdio.h> #include<vector> #include<iostream> const int up=10000;//素数の上限 std::vector<int> sosuu; bool so[up+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; } } } __int64 phi(__int64 n){ double re=n; for(int i=0;i<sosuu.size()&&sosuu[i]*sosuu[i]<=n;i++){ __int64 p=sosuu[i]; int count=0; while(n%p==0){ n/=p; count++; } if(count>0)re*=(1-1.0/p); } if(n!=1)re*=(1-1.0/n); return (__int64)re+0.5; } int main(){ setSo(); for(int i=1;i<100;i++){ std::cout<<"("<<phi(i)<<")"; } }

表示オプション

横に並べて表示:
変化行の前後のみ表示: