記事のディレクトリ
序文
私は今日アルゴリズムを学び始めました、そして私はこれまでよく勉強したことがありません。しかし、今日、私はついにアルゴリズムの意味を理解しました。
1.トピック-素数ペア予想
dnを次のように定義しましょう:dn = p(n + 1)−p nここで、p iはi番目の素数です。明らかにd1 = 1であり、d nはn> 1の場合でも同様です。「素数予想」は、「2の差がある隣接する素数のペアが無限にある」と信じています。ここで、任意の正の整数N(<10 5)が与えられた場合、予想を満たすNを超えない素数ペアの数を数えてください。第二に、質問をするという考え
私の最初のアイデアは非常に単純で、すべての素数を直接見つけて、素数の各ペアの差が2であるかどうかを確認するだけでした。素数を直接かつ徹底的に見つけます。
コードは次のように表示されます。
import java.util.Scanner;
public class test2 {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int b = 2;
int c = 3;
int num = 0;
boolean z = true;
for (int x = 3; x<=a ; x++){
for(int y = 2;y<=x;y++){
if(x%y==0){
z = false;
break;
}
}
if(z){
b = c;
c = x;
if (c - b == 2){
num++;
}
}
z = true;
}
System.out.println(num);
}
}
機能に問題はありませんが、スペルチェック時にタイムアウトしました。その理由は、数が10 ^ 5の場合です。数が素数であるかどうかを確認するのに時間がかかりすぎます。現時点では何もできません。
修正
クエリを実行した後、数値が素数であるかどうかを判断することは、それ自体を網羅する必要はありません。平方根まで数えてください。これにより、後の段階での計算時間を大幅に節約できます。Math.sqrt(x)を使用して、Javaの平方根を計算できます。そのため、素数判定コードを以下のように変更します。
for(int y = 2;y<=Math.sqrt(x);y++){
if(x%y==0){
z = false;
break;
}
}
総括する
今日、ようやくプログラムのアルゴリズムの意味がわかりました。以前は頭を使っただけで、ドアを開けたくなった。簡単なトピックですが、それでも多くのメリットがあると感じています。記念として、ちょうど最初のブログ。