| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1251 人关注过本帖
标题:[求助]求质数结果不对
只看楼主 加入收藏
autumnleaf
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-10-22
收藏
 问题点数:0 回复次数:19 
[求助]求质数结果不对
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的最小的质数
搜索更多相关主题的帖子: 质数 结果 
2006-11-19 15:05
purana
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
收藏
得分:0 
程序是对的..却又得不到正确的答案?...那是什么...

我的msn: myfend@
2006-11-19 15:07
孤风的边缘
Rank: 1
等 级:新手上路
威 望:2
帖 子:66
专家分:0
注 册:2006-11-19
收藏
得分:0 
......
我运行了一下这个程序,完全可以得到结果,最后的输出是211啊~楼主系编译器有问题吧~~要不就是文件名和类名不一致?

把爱留给爱你的人。。。。
2006-11-19 15:21
ttrr550
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2006-11-5
收藏
得分:0 
for(j=2;j<i;j++)
if((i%j)==0) break;
if(j==i)
{ number=i;
break;
}

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

2006-11-19 15:36
ttrr550
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2006-11-5
收藏
得分:0 
改成if(j==(i-1))
{
number=i;
break;
}
应该可以!

2006-11-19 15:37
purana
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
收藏
得分:0 
[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..不知道对不..

我的msn: myfend@
2006-11-19 15:41
孤风的边缘
Rank: 1
等 级:新手上路
威 望:2
帖 子:66
专家分:0
注 册:2006-11-19
收藏
得分:0 
以下是引用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~


把爱留给爱你的人。。。。
2006-11-19 15:45
孤风的边缘
Rank: 1
等 级:新手上路
威 望:2
帖 子:66
专家分:0
注 册:2006-11-19
收藏
得分:0 
以下是引用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
ttrr550
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2006-11-5
收藏
得分:0 
以下是引用孤风的边缘在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编辑过]


2006-11-19 16:09
孤风的边缘
Rank: 1
等 级:新手上路
威 望:2
帖 子:66
专家分:0
注 册:2006-11-19
收藏
得分:0 
以下是引用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了~


把爱留给爱你的人。。。。
2006-11-19 16:23
快速回复:[求助]求质数结果不对
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018246 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved