Javaアルゴリズム-素数

素数は、それ自体でのみ割り切れる数であり、1(1は素数ではありません)

1.数が素数であるかどうかを判断します

この数を2で累乗根nで割る必要があります。割り切れる現象がある場合は素数ではなく、そうでない場合は素数です。

ソースコード:

	public static int F(int x) {
    
       //判断是否为质数 2,3,5,7,11,13,17,19......
		if(x==1) return 0;
		for(int i=2;i<=x/i;i++)
		{
    
    
			System.out.println(x+ " "+ i);
			if(x%i==0)
				return 0;
		}
		return 1;
	}

素数かどうかを判断するだけでなく、素因数を分解することもできます

—————————————————————————————

2.素因数分解

一意の分解定理としても知られる算術の基本定理によれば、任意の合成数について、いくつかの素数の累乗の積を使用して表現できます。

アルゴリズムの論理記述:素因数を見つけるためのループ。見つかった場合、ループはこの数で除算を続け、数が記録されます。割り切れない場合、ループはループを終了し、次の素因数最後のnが1でない場合は、最後の素因数があることを意味します。nであり、出力されます。

ソースコード:

	public static void prime(int n){
    
    
	    for(int i = 2; i <= n / i; i++){
    
          循环到根号n为止
	        int a = 0, b = 0;
	        while(n % i == 0){
    
                    如果可以整除说明是质因数
	            a = i;
	            n /= i;                       一直除以这个数直到不整除为止
	            b++;                          累计a的个数
	        }
	        if(b > 0)
	            System.out.println(a + " " + b);
	    }
	    if(n > 1) System.out.println(n + " " + 1);
	}

入る

24

出力

2 3

3 1

—————————————————————————————

3.エーリッヒスクリーニング法

1から100までの素数を見つける方法は、素数を判断する最初の方法に従って100回繰り返すことができ、別の方法はAhのスクリーニング方法です。

アルゴリズムの紹介:最初に配列を作成します。0は素数を意味し、1は合成数を意味します。2から素数を探し始め、素数を見つけて2のすべての倍数を1に変え、次に3から素数を探し始め、3のすべての倍数を1に変えます...

たとえば、1から18までの素数を見つけます

最初に2、4、6、8、10、12、14、16、18の倍数を除外し、次に3、6、9、12、15、18の倍数を除外し、次に5、10の倍数を除外します。 15、以下同様に18に循環します。
	static int st[] = new int [100];        //0表示质数,1表示合数
	static int n;
	public static void E(int n) {
    
    
		for(int i=2;i<=n;i++) {
    
    
			if(st[i]==0)                    //第一轮,2开始,4,6,8,10,12...20被筛选
			{
    
                                   //第二轮,3开始,6,9,12,15,18被筛选
				for(int j=2*i;j<=n;j+=i)    //第三轮,5开始,10,15,20被筛选
					st[j]=1;
				}
		}
	}

おすすめ

転載: blog.csdn.net/weixin_44919936/article/details/109751883