//比1大的整數中,除了1和它本身以外,不再有別的因數,這種整數叫做質數或素數
private static void testSushu() {
List<String> sushuList = new ArrayList<String>();
int num = 1000;
int j;
boolean isSushu;
for (int i = 2; i <= num; i++) {//找2~1000之間素數
//備註:這裏加上這個判斷其實有些時候也不一定會提升性能很明顯,加了判斷本身也是需要消耗計算機資源。數量比較大,提升會比較明顯
if(i == 1 || (i % 2 == 0 && i != 2 ) ) continue; //偶數和1排除
isSushu = true;
for (j = 2; j < i; j++) {//當前循環變量2~i的數,能否被i整除,如果能,表明不是素數
if (i % j == 0) {
isSushu = false;
break;
}
}
//打印
if ( isSushu) {
sushuList.add(i+"");
}
}
System.out.println("數量:" + sushuList.size());
System.out.print("元素:");
for (String str : sushuList) {
System.out.print(str + " ");
}
}
//除2
private static void testSushu2() {
List<String> sushuList = new ArrayList<String>();
int num = 1000;
int j;
boolean isSushu;
for (int i = 2; i <= num; i++) {
//備註:這裏加上這個判斷其實有些時候也不一定會提升性能很明顯,加了判斷本身也是需要消耗計算機資源。數量比較大,提升會比較明顯
if(i == 1 || (i % 2 == 0 && i != 2 ) ) continue; //偶數和1排除
isSushu = true;
for (j = 2; j <= i/2 ; j++) {//這裏比上一步:性能提升一倍,主要考慮2 ~ i/2之間的數,如果找到一個數j能被i整除,表明不是素數
if (i % j == 0) {
isSushu = false;
break;
}
}
//打印
if (isSushu) {
sushuList.add(i+"");
}
}
System.out.println("數量:" + sushuList.size());
System.out.print("元素:");
for (String str : sushuList) {
System.out.print( str + " ");
}
}
//開方:最高效
private static void testSushu3() {
List<String> sushuList = new ArrayList<String>();
int num = 1000;
int j;
boolean isSushu;
for (int i = 2; i <= 1000; i++) {
//備註:這裏加上這個判斷其實有些時候也不一定會提升性能很明顯,加了判斷本身也是需要消耗計算機資源。數量比較大,提升會比較明顯
if(i == 1 || (i % 2 == 0 && i != 2 ) ) continue; //偶數和1排除
isSushu = true;
for (j = 2; j <= Math.sqrt(i); j++) {
if (i % j == 0) {
isSushu = false;
break;
}
}
if (isSushu) {
sushuList.add(i+"");
}
}
System.out.println("數量:" + sushuList.size());
System.out.print("元素:");
for (String str : sushuList) {
System.out.print( str + " ");
}
}
java求素數的方式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.