6.1から100の和を2乗したものと1から100までの値各々を2乗した値をすべて足した値との差を出す
int main(void){ int a=0,b=0; for(int i=1;i<101;i++){ a += i*i; b += i; } cout << b*b-a<<endl; return 0; }
7.素数の10001番目を出す。エラトステネスの篩を使いました
#define smax 400000 int a[smax]; vector<int> num; void furui(){ fill(a,a+smax,1); a[0] = a[1] = 0; REP(i,2,smax){ if(a[i]){ for(int j=i*2;j<smax;j+=i) a[j] = 0; } } rep(i,smax) if(a[i]) num.push_back(i); } int main(void){ furui(); cout << num[10000] << endl; return 0; }
8.与えられた1000桁の数字の連続する5つの数字の積の最大を求める
これはinputfileを使っています。
string str; int main(void){ cin >> str; int res=0; for(int i=0;i<1000-4;i++){ int s = 1; for(int j=i;j<i+5;j++){ s *= str[j]-'0'; } res = max(res,s); } cout << res << endl; return 0; }
9.ピタゴラスの定理が成り立つ3つの値の和が1000になる組みが1組存在するのでその3つの値の積をだす
愚直にやりましたが0 < a < (n/3),a < b < (n/2)が成立するため少しfor文はいじりました。
int main(void){ for(int i=1;i<1000/3;i++) for(int j=i+1;j<1000/2;j++) for(int k=j+1;k<1000;k++) if(k*k == i*i+j*j && i+j+k == 1000){ cout <<i*j*k <<endl; break; } return 0; }
10.200万以下の素数の和を求める
#define smax 2000001 int a[smax]; void furui(){ fill(a,a+smax,1); a[0] = a[1] = 0; for(int i=2;i<smax;i++){ if(a[i]){ for(int j=i*2;j<smax;j+=i) a[j] = 0; } } } int main(void){ furui(); ll sum=0; REP(i,2,smax) if(a[i]) sum += i; cout << sum << endl; return 0; }