java 判断素数

public class SS{
public static void main(String[] args){
int i=(int)(Math.random()*50+50);
int j;
System.out.println("这个随机数大小为:"+i);
for(j=1;j<=i;j++)
{if(i%j==0)
break; }
if(j==i)
System.out.println(i+"是素数");
}
}

请问这个程序哪里错了 。。。 为什么不能判断素数
这个程序是要随机输出一个50-100之间的数 并判断是否为素数的

j = 2开始就正确了
public class SS{
public static void main(String[] args){
int i=(int)(Math.random()*50+50);
int j;
System.out.println("这个随机数大小为:"+i);
for(j=2;j<=i;j++)
{if(i%j==0)
break; }
if(j==i)
System.out.println(i+"是素数");
}
}

包括自己是正确的,这题包括自己才是楼主算法的精髓。楼主的算法是从1(实际应该是2开始)寻找能被i整除的数,如果能被i整除,且这个数字等于i本身了,也就是说从2~i之间只有i这个值能被i整除,那么这个数字就是质数。
所以除了上面的j = 2修改之外,楼主算法的另外一个修改方案
public class SS{
public static void main(String[] args){
int i=(int)(Math.random()*50+50);
int j;
System.out.println("这个随机数大小为:"+i);
for(j=1;j<=i;j++)
{if(i%j==0 && j != 1)
break; }
if(j==i)
System.out.println(i+"是素数");
}
}
这个也是可以的

当然最快的还是
public class SS {
public static void main(String[] args) {
int i = (int) (Math.random() * 50 + 50);
int j;
System.out.println(这个随机数大小为:"+i);
boolean isPrime = true;

for(j = 2; j < Math.sqrt(i); j++){
if(i % j == 0){
isPrime = false;
break;
}
}

if(isPrime){
System.out.println(i+"是素数");
}

}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-15
import java.util.Scanner;

public class PrimeNumber {

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数:");

int num = scanner.nextInt();  //输入的待判断的数字

if(isPrime(num))
System.out.println("数字 " + num + " 是素数");
else
System.out.println("数字 " + num + " 不是素数");
}

/**
 * 判断一个数是否是素数
 * 算法核心:
 *  定理: 如果n不是素数, 则n有一个因子d满足1< d<=sqrt(n)
    * 证明: 如果n不是素数, 则由定义:n有一个因子d满足1< d< n。 如果d大于sqrt(n), 则n/d是满足1< n/d<=sqrt(n)的一个因子
 *      
 *      由此可知:1. 小于等于2的不是素数    2. 2的倍数的数也不是素数    3. 如果从小到大开始遍历,一直到sqrt(n)还不能找到一个因子d,
 *                则可以说明该数是素数
 *      
 * @param num 待判断的数
 * @return 判断结果
 * */
private static boolean isPrime(int num) {
if(num <= 2 || num % 2 == 0)
return false;
for(int i = 3;i * i <= num;i += 2){
if(num % i == 0)
return false;
}

return true;
}

}


详细的解释已经写在上面的代码的注释中了,当然这种算法不算最优,但是比较简单易理解。当然更优的方案可以采用“筛选法”,具体的可以自行百度

第2个回答  2011-03-28
for(j=1;j<=i;j++) 错在这个地方,素数是要除去1和本身的。所以要改为
for(j=2;j<i;j++) 。楼上的包括了自己。
第3个回答  2011-03-28
for(j=1;j<=i;j++)
改成for(j=2;j<=i;j++) ,因为如果j=1,i%j 永远为0 啊
第4个回答  2011-03-28
很明显的错误 当j=1的时候 就break了 还怎么判断啊??任何数都能被1整除的 j 应该从2开始
相似回答