paizaラーニングのレベルアップ問題集「素数メニュー」からの出典です。
paiza.jp
C++による「素数メニュー」問題集: paiza 予想と、それらの提出コードの解答例です。
僕が作成、提出したコードは、以下のとおりです。
・STEP: 1 ゴールドバッハ予想
/* C++による「素数メニュー」問題集: paiza 予想 STEP: 1 ゴールドバッハ予想 https://paiza.jp/works/mondai 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; bool prime(ll n){ for(ll i=2;i<=sqrt(n);i++){ if(n%i==0){ return false; } } return true; } int main(void){ ll n; cin>>n; vector<pair<ll,ll>> v; vector<ll> vi; for(ll i=2;i<n;i++){ if(prime(i)==true){ if(prime(n-i)==true){ v.push_back(pair(i*(n-i),i)); } } } sort(v.rbegin(),v.rend()); ll ans=v[0].second; if(ans>n-ans){ cout<<n-ans<<endl; cout<<ans<<endl; }else{ cout<<ans<<endl; cout<<n-ans<<endl; } return 0; }
・STEP: 2 中国剰余定理
/* C++による「素数メニュー」問題集: paiza 予想 STEP: 2 中国剰余定理 https://paiza.jp/works/mondai 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; int main(void){ ll m1,m2,b1,b2; cin>>m1>>m2>>b1>>b2; for(ll i=0;i<m2;i++){ ll z=m1*i+b1; if(z%m2==b2){ cout<<z<<endl; return 0; } } }
・FINAL問題: paiza 予想
/* C++による「素数メニュー」問題集: paiza 予想 FINAL問題: paiza 予想 https://paiza.jp/works/mondai 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; bool prime(ll n){ for(ll i=2;i<=sqrt(n);i++){ if(n%i==0){ return false; } } return true; } int main(void){ ll i; for(i=2;i<=9999;i++){ if((i*i)%2==0){ continue; }else{ bool tf=false; for(int j=0;j<i;j++){ if(prime(j)==true){ if(prime(i*i-j)==true){ tf=true; } } } if(tf==true){ if(i*i==99980001){ cout<<"paiza's conjecture is correct." <<endl; return 0; } continue; }else{ cout<<i*i<<endl; if(i*i==99980001){ return 0; } } } } }
これで「素数メニュー」問題集は、コンプリート!
面白かったー。
paizaラーニングのレベルアップ問題集については、ユーザー同士で解答を教え合ったり、コードを公開したりするのは自由としています。
また授業や研修、教材などにも利用できるそうです。