寝癖頭の解法

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

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

paizaラーニングのレベルアップ問題集「素数メニュー」からの出典です。
paiza.jp
Javaによる「素数メニュー」問題集: 素数大学と、それらの提出コードの解答例です。

僕が作成、提出したコードは、以下のとおりです。

・STEP: 1 グロタンディーク素数

/*
Javaによる「素数メニュー」問題集: 素数大学
STEP: 1 グロタンディーク素数
https://paiza.jp/works/mondai
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
public class Main {
    public static void main(String[] args) {
        int n = 57;
        if(n < 2){
            System.out.println("NO");
            return;
        }
        for(int i = 2; i < n; i++){
            if(n%i == 0){
                System.out.println("NO");
                return;
            }
        }
        System.out.println("YES");
    }
}

・STEP: 2 素数判定

/*
Javaによる「素数メニュー」問題集: 素数大学
STEP: 2 素数判定
https://paiza.jp/works/mondai
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        if(n < 2){
            System.out.println("NO");
            return;
        }
        for(int i = 2; i < n; i++){
            if(n%i == 0){
                System.out.println("NO");
                return;
            }
        }
        System.out.println("YES");
    }
}

・STEP: 3 大きな数の素数判定

/*
Javaによる「素数メニュー」問題集: 素数大学
STEP: 3 大きな数の素数判定
https://paiza.jp/works/mondai
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long n = sc.nextLong();
        if(n < 2){
            System.out.println("NO");
            return;
        }
        if(n == 2){
            System.out.println("YES");
            return;
        }
        if(n%2 == 0){
            System.out.println("NO");
            return;
        }
        for(int i = 3; i <= Math.sqrt(n); i+=2){
            if(n%i == 0){
                System.out.println("NO");
                return;
            }
        }
        System.out.println("YES");
    }
}

・STEP: 4 エラトステネスの篩

/*
Javaによる「素数メニュー」問題集: 素数大学
STEP: 4 エラトステネスの篩
https://paiza.jp/works/mondai
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        boolean[] is_prime = new boolean[n+1];
        is_prime[0] = false;
        is_prime[1] = false;
        for(int i = 2; i <= n; i++) is_prime[i] = true;
        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;
            }
        }
        if(is_prime[n]){
            System.out.print("YES");
        }else{
            System.out.print("NO");
        }
    }
}

・STEP: 5 フェルマーテスト

/*
Javaによる「素数メニュー」問題集: 素数大学
STEP: 5 フェルマーテスト
https://paiza.jp/works/mondai
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int a = 2;
        int farmat = 1;
        if(n%a == 0){
            System.out.println("NO");
            return;
        }
        for(int i = 0; i < n-1; i++){
            farmat = farmat*a;
            farmat = farmat%n;
        }           
        if(farmat == 1){
            System.out.println("YES");
        }else{
            System.out.println("NO");
        }
    }
}

・FINAL問題: 素数大学

/*
Javaによる「素数メニュー」問題集: 素数大学
FINAL問題: 素数大学
https://paiza.jp/works/mondai
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for(int i = 0; i < n; i++){
            int a = sc.nextInt();
            if(a < 2){
                System.out.println("failure");
            }else if(a == 2){
                System.out.println("pass");
            }else if(a%2 == 0){
                System.out.println("failure");
            }else{
                int cnt = 0;
                for(int j = 3; j <= Math.sqrt(a); j+=2){
                    if(a%j == 0){
                        cnt++;
                        break;
                    }
                }
                if(cnt == 0){
                    System.out.println("pass");
                }else{
                    System.out.println("failure");
                }
            }
        }
    }
}

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