寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

paizaラーニング: C++による「素数メニュー」問題集: 素数大学

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ラーニングのレベルアップ問題集については、ユーザー同士で解答を教え合ったり、コードを公開したりするのは自由としています。
また授業や研修、教材などにも利用できるそうです。