为了账号安全,请及时绑定邮箱和手机立即绑定

Java找素数,结果重复出现

Java找素数,结果重复出现

MADAO7 2016-04-11 14:59:58
public class PrimeNumber02{  public static void main(String [ ] args)  {        int count = 0;   boolean b ;    for(int i = 101;i<200;i+=2)  {       for(int j = 2;j<=Math.sqrt(i);j++)  {        if(i%j==0){  break;}                       else{ b=true;}                       if(b) {                                  count++;  System.out.print(i);  if(count%5==0)  System.out.println(); }   }      }      }}运行结果是:101101101101101101101101101103103......我想要的是:101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 所以上诉的代码错在哪里?
查看完整描述

1 回答

已采纳
?
guozhchun

TA贡献103条经验 获得超76个赞

for (int j = 2; j <= Math.sqrt(i); j++)
{
	if (i % j == 0)
	{
		break;
	}
	// 从这里以下的代码错了。
	// 判断一个数是否是素数需要等这个循环结束后在循环外判断,也就是需要判断是否全不能被这些数整除
	// 而不是一个数不能整除就置为true并输出
	// 可以模拟程序的运行过程,当j = 2 时,b = true,然后进入if(b)输出结果
	// 当j = 3 时, 再次进入if(b)输出结果。
	// 如果没有跳出循环,则多次输出结果到循环结束
	else
	{
		b = true;
	}
	if (b)
	{
		count++;
		System.out.print(i);
		if (count % 5 == 0)
			System.out.println();
	}
}

参考的实现代码如下

public class PrimeNumber02
{
	public static void main(String[] args)
	{
		int count = 0;
		boolean b;
		for (int i = 101; i < 200; i += 2)
		{
			b = true;  // 用于判断是否是素数,如果被某个数整除,则为false,否则为true
			for (int j = 2; j <= Math.sqrt(i); j++)
			{
				if (i % j == 0)
				{
					b = false;
					break;
				}
			}
			
			if (b)
			{
				count++;
				System.out.print(i + " ");
				if (count % 5 == 0)
					System.out.println();
			}
		}
	}
}


查看完整回答
反对 回复 2016-04-11
  • 1 回答
  • 0 关注
  • 1544 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信