paizaラーニングのレベルアップ問題集「素数メニュー」からの出典です。
paiza.jp
C++による「素数メニュー」問題集: 素数大学と、それらの提出コードの解答例です。
僕が作成、提出したコードは、以下のとおりです。
・STEP: 1 グロタンディーク素数
/* C++による「素数メニュー」問題集: 素数大学 STEP: 1 グロタンディーク素数 https://paiza.jp/works/mondai 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n=57; int cnt=0; for(int i=2;i<n;i++){ if(n%i==0){ cnt++; } } if(cnt==0){ cout<<"YES"<<endl; }else{ cout<<"NO"<<endl; } return 0; }
・STEP: 2 素数判定
/* C++による「素数メニュー」問題集: 素数大学 STEP: 2 素数判定 https://paiza.jp/works/mondai 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n; cin>>n; int cnt=0; if(n==1){ cout<<"NO"<<endl; return 0; } for(int i=2;i<n;i++){ if(n%i==0){ cnt++; } } if(cnt==0){ cout<<"YES"<<endl; }else{ cout<<"NO"<<endl; } }
・STEP: 3 大きな数の素数判定
/* C++による「素数メニュー」問題集: 素数大学 STEP: 3 大きな数の素数判定 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 n; cin>>n; if(n==1){ cout<<"NO"<<endl; return 0; } for(ll i=2;i<=sqrt(n);i++){ if(n%i==0){ cout<<"NO"<<endl; return 0; } } cout<<"YES"<<endl; }
・STEP: 4 エラトステネスの篩
/* C++による「素数メニュー」問題集: 素数大学 STEP: 4 エラトステネスの篩 https://paiza.jp/works/mondai 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n; cin>>n; vector<bool> is_prime; is_prime.resize(n+1,true); is_prime[0]=false; is_prime[1]=false; for(int i=2;i<=n;i++){ if(is_prime[i]==true){ for(int j=2;i*j<=n;j++){ is_prime[i*j]=false; } } } for(int i=0;i<n+1;i++){ if(is_prime[i]==true){ if(i==n){ cout<<"YES"<<endl; return 0; } } } cout<<"NO"<<endl; }
・STEP: 5 フェルマーテスト
/* C++による「素数メニュー」問題集: 素数大学 STEP: 5 フェルマーテスト https://paiza.jp/works/mondai 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n; cin>>n; int a=2; bool tf=true; if(n%a==0){ tf=false; }else{ int fermat=1; for(int i=0;i<n-1;i++){ fermat*=a; fermat%=n; } if(fermat%n!=1){ tf=false; } } if(tf==true){ cout<<"YES"<<endl; }else{ cout<<"NO"<<endl; } return 0; }
・FINAL問題: 素数大学
/* C++による「素数メニュー」問題集: 素数大学 FINAL問題: 素数大学 https://paiza.jp/works/mondai 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n; cin>>n; vector<int> a(n); for(int i=0;i<n;i++){ cin>>a[i]; if(a[i]==1){ cout<<"failure"<<endl; continue; }else{ bool tf=false; for(int j=2;j<=sqrt(a[i]);j++){ if(a[i]%j==0){ cout<<"failure"<<endl; tf=true; break; } } if(tf==true){ continue; } } cout<<"pass"<<endl; } return 0; }
paizaラーニングのレベルアップ問題集については、ユーザー同士で解答を教え合ったり、コードを公開したりするのは自由としています。
また授業や研修、教材などにも利用できるそうです。