当前位置: 代码迷 >> Java相关 >> [求助]求质数结果不对
  详细解决方案

[求助]求质数结果不对

热度:125   发布时间:2006-11-19 15:05:20.0
[求助]求质数结果不对
public class aaa2
{
public static void main(String[] args)
{
int i,j,number;
for(i=201; ;i++)
{
for(j=2;j<i;j++)
if((i%j)==0) break;
if(j==i)
{number=i;
break;
}
}

System.out.println(number);
}
}
请大家看看,程序是对的,就是的不到正确的答案
是求大于200的最小的质数
搜索更多相关的解决方案: 质数  结果  

----------------解决方案--------------------------------------------------------
程序是对的..却又得不到正确的答案?...那是什么...
----------------解决方案--------------------------------------------------------
......
我运行了一下这个程序,完全可以得到结果,最后的输出是211啊~楼主系编译器有问题吧~~要不就是文件名和类名不一致?
----------------解决方案--------------------------------------------------------
for(j=2;j<i;j++)
if((i%j)==0) break;
if(j==i)
{ number=i;
break;
}

if(j==i)? 可能运行吗
上面for不是 ( .. ;j<i;..)了吗?
----------------解决方案--------------------------------------------------------
改成if(j==(i-1))
{
number=i;
break;
}
应该可以!
----------------解决方案--------------------------------------------------------
[CODE] public static void main(String[] args){
boolean isperist = false;
int num = 199;
int temp=0;
int j = 2;
do{
num+=2;
while(j<num/2){
if(num%j==0){
isperist = false;
break;
}else{
j++;
isperist = true;
}
}
if(isperist){
temp = num;
break;
}
}while(isperist==false);

System.out.println(temp);
}[/CODE]

我算到是209..不知道对不..

----------------解决方案--------------------------------------------------------
以下是引用purana在2006-11-19 15:41:30的发言:
[CODE] public static void main(String[] args){
boolean isperist = false;
int num = 199;
int temp=0;
int j = 2;
do{
num+=2;
while(j<num/2){
if(num%j==0){
isperist = false;
break;
}else{
j++;
isperist = true;
}
}
if(isperist){
temp = num;
break;
}
}while(isperist==false);

System.out.println(temp);
}[/CODE]

我算到是209..不知道对不..

这个肯定不对,因为209可以被11整除,得19~
----------------解决方案--------------------------------------------------------

以下是引用ttrr550在2006-11-19 15:36:03的发言:
for(j=2;j<i;j++)
if((i%j)==0) break;
if(j==i)
{ number=i;
break;
}

if(j==i)? 可能运行吗
上面for不是 ( .. ;j<i;..)了吗?

并非是这样的~~j一定会等于i,因为当for循环循环到j==(i-1)后,循环并没有结束,依然会执行后面的j++,即使得j此时已经等于了i,然后再去判断j是否小于i,发现不再小于,退出循环,而此时j已经等于i了,因此if(j==i)这一句肯定会执行。楼主的这段程序我验证过了,可以运行,结果是211(只是效率比较低,可以精简)

[此贴子已经被作者于2006-11-19 16:04:24编辑过]


----------------解决方案--------------------------------------------------------
以下是引用孤风的边缘在2006-11-19 15:51:26的发言:

并非是这样的~~j一定会等于i,因为当for循环循环到j==(i-1)后,循环并没有结束,依然会执行后面的j++,即使得j此时已经等于了i,然后再去判断j是否小于i,发现不再小于,退出循环,而此时j已经等于i了,因此if(j==i)这一句肯定会执行。楼主的这段程序我验证过了,可以运行,结果是211

不是的 因为j++ 是在 那次循环运行后才加1
不会运行到if(j==i)
再说lz 的 if((i%j)==0) break; //如果j==i 肯定跳出了
if(j==i) //下面这句就不会运行了

[此贴子已经被作者于2006-11-19 16:14:26编辑过]


----------------解决方案--------------------------------------------------------
以下是引用purana在2006-11-19 15:41:30的发言:
[CODE] public static void main(String[] args){
boolean isperist = false;
int num = 199;
int temp=0;
int j = 2;
do{
num+=2;
while(j<num/2){
if(num%j==0){
isperist = false;
break;
}else{
j++;
isperist = true;
}
}
if(isperist){
temp = num;
break;
}
}while(isperist==false);

System.out.println(temp);
}[/CODE]

我算到是209..不知道对不..

该程序的问题出在把变量int j = 2设在了循环之外,呵呵,导致每次循环并没有把J初始为2的状态,而是按照上次循环后的j的值继续执行的

class Aaa{
public static void main(String[] args){
boolean isperist = false;
int num = 199;
int temp=0;

do{
num+=2;

int j = 2;
while(j<num/2){
if(num%j==0){
isperist = false;
break;
}else{
j++;
isperist = true;
}
}
if(isperist){
temp = num;
break;
}
}while(isperist==false);

System.out.println(temp);
}

}

这样就OK了~
----------------解决方案--------------------------------------------------------

  相关解决方案