1。素数を解決します
1.1説明
まず第一に、概念を理解しましょう。これは素数とは何かですか?プライム番号:数字が1それ自体でのみ分割できる場合、そのような数値は素数と呼ばれ、対応する数は合計番号と呼ばれます。この概念に基づいて、1から開始し、常にテストして、1からそれ自体に分割できる数字があるかどうかを確認する方法をすばやく考えることができます。
この観点から見ると、プライムナンバーを見つけるのは実際には非常に簡単です。私たちにとってもっと便利な方法はありますか?これは、エラトステネスによって素数を見つける有名な方法です。
1.2解決策
まず、サークルを使用してこの問題を解決できます。指定された数字をそれよりも小さいすべての数値で除算します。あなたがそれを分裂させることができれば、それは主要な数字ではありません。しかし、円のチェック数を減らす方法は?すべての素数をnよりも小さいことを見つける方法は?
チェックする数がnであると仮定すると、実際には、Nのルート番号を確認するだけです。理由は非常に簡単です。 a*b = n、aがnのルート番号より大きい場合、実際には、aよりも少ないことを確認する前に、数値bが分裂できることを最初に確認することを確認します。ただし、プログラムでルート番号を使用すると、精度の問題が発生するため、チェックにはi*i <= nを使用でき、実行はより速くなります。
たとえば、1〜nを保存するためのふるいがあると仮定しましょう。
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ......... n
最初に2の倍数をふるいにかけます:
2 3 5 7 9 11 15 17 17 191 ......... n
次に、3の倍数をふるいにかけます。
2 3 5 7 11 13 17 19 ......... n
次に、5の倍数をふるい、7のプライムナンバーをふるいにかけ、11の倍数をふるいにかける...このようにして、最後に残っている数字はすべて素数であり、これはエラトステネススクリーニング方法(eratostthenessevemethod)です。
チェック数を減らすことができます。実際、6N+1および6N+5を確認するだけです。つまり、2と3の倍数を直接スキップして、プログラムでのIFチェックアクションを削減できるようにします。
1.3コード
Java.util。*をインポートします。 public class prime {public static int [] findprimes(final int max){int [] prime = new int [max+1]; arrayList list = new ArrayList(); for(int i = 2; i <= max; i ++)prime [i] = 1; for(int i = 2; i*i <= max; i ++){//これは(prime [i] == 1){for(int j = 2*i; j <= max; j ++){if(j%i == 0)prime [j] = 0; }}} for(int i = 2; i <max; i ++){if(prime [i] == 1){list.add(new Integer(i)); }} int [] p = new int [list.size()]; object [] objs = list.toarray(); for(int i = 0; i <p.length; i ++){p [i] =((integer)objs [i])。intvalue(); } purny p; } public static void main(string [] args){int [] prime = prime.findprimes(1000); for(int i = 0; i <prime.length; i ++){system.out.print(prime [i]+""); } system.out.println(); }}2。因数分解
2.1説明
上記のように、まず因数分解とは何かを理解しましょう。数字を他のいくつかの数値の積に変換することは、因数分解と呼ばれます。この概念を理解した後、私たちは上記のソリューションと比較して、素数を解決するために合計数の係数を解決していることを理解できるはずです。
Factorizationは基本的に、入力番号よりも小さい値を除数として使用し、入力数で削除します。それを分割できる場合、それは要因と見なされます。より速い解決策は、すべての素数を数よりも小さいことを見つけることであり、それを分割できるかどうかを確認することです。
2.2コード
java.util.arraylistをインポートします。 public class factor {public static int [] factor(int num){int [] pnum = prime.findprimes(num); arrayList list = new ArrayList(); for(int i = 0; pnum [i] * pnum [i] <= num;){if(num%pnum [i] == 0){list.add(new integer(pnum [i])); num /= pnum [i]; } else i ++; } list.add(new Integer(num)); int [] f = new int [list.size()]; object [] objs = list.toarray(); for(int i = 0; i <f.length; i ++){f [i] =((integer)objs [i])。intvalue(); } furne f; } public static void main(string [] args){int [] f = factor.factor(100); for(int i = 0; i <f.length; i ++){system.out.print(f [i]+""); } system.out.println(); }}3。概要
素数と因数分解を解決することは、学習プログラムとアルゴリズムの基本的なスキルであり、それらを熟練してマスターする必要があります。ここのコードには少数のコメントしかありませんが、これは初心者にとっては少し難しいかもしれませんが、これはプログラムのアルゴリズムの宮殿に入るための最初のステップです。このコードをマシンにコピーし、コメントを段階的に記入して、プログラムプロセスをより明確にすることができます。
上記は、素数と因数分解コードを実現するためのJavaプログラミングの実装に関するこの記事のすべての内容です。すべての人に役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください!