素数は、それ自体でのみ割り切れる数であり、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;
}
}
}