| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 773 人关注过本帖, 1 人收藏
标题:求一个数是否为素数,代码写好了,感觉好像没错,但实际上没结果的
只看楼主 加入收藏
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
结帖率:100%
收藏(1)
已结贴  问题点数:8 回复次数:10 
求一个数是否为素数,代码写好了,感觉好像没错,但实际上没结果的
#include<stdio.h>
int main()
{
    int i,j,a=0;
    for(i=3;i<=10;i++)
    {
        for(j=2;j<=i-1;j++)
        {
            if(i%j!=0)
                a=i;
            if(i%j==0)
                break;
        }
          printf("%6d",a);
    }     
        return 0;
}
不知道能不能用这样的方法来判断一个数为素数,我的基本思路是先外部循环,i=3往内部循环送去,然后在里面循环i-1次,每一次内部循环都用if语句来判断,若正确则i值赋给a;若不正确,则退出,若正确的话,继续j++;直到i-1次,但输出的时候却是“3 3 5 5 7 7 9 9请按任何键继续……”,分析不出哪里除了问题

[ 本帖最后由 love云彩 于 2012-12-20 22:26 编辑 ]
搜索更多相关主题的帖子: return include 
2012-12-20 14:05
crystall
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:184
专家分:809
注 册:2012-12-1
收藏
得分:1 
程序代码:
这个方法当然可以了,需要加个变量判断一下。

素数:只能被1和自己整除。
你这个答案输出9, 9根本就不是素数。
为什么会出现这样呢?
当 i = 9时, j = 2, i % j != 0,此时a = 9.
那么它还会继续下一轮循环, j = 3, i % j == 0 此时退出循环,打印a.

关于为什么会输出 3 3 5 5....
那是因为,第一次判断3是否为素数,为素数 a = 3, 打印a.
          第二次判断4是否为素数,不为素数, 退出循环。 此时a的值还是为3,没有被重新赋值,因此又打印了一次3,后面的5 5 同样的道理。

#include<stdio.h>
int main()
{
    int i,j,a=0;
    bool isPrimeNum = false;
   
    for(i = 3; i<= 100; i++)
    {
        for(j = 2;j < i;j++)
        {
            if(i%j != 0)
            {
                a=i;
                isPrimeNum = true;
            }
            else
            {
                isPrimeNum = false;
                break;
            }
        }
       
        if(isPrimeNum == true)
        {
            printf("%d\r\n",a);
        }
    }    
    return 0;
} 
2012-12-21 10:07
wkz2012
Rank: 4
等 级:业余侠客
帖 子:123
专家分:253
注 册:2012-12-13
收藏
得分:1 
楼上正解,只要是奇数就会被打印

我了个去的编程!
2012-12-21 10:55
SPWENG
Rank: 1
等 级:新手上路
帖 子:4
专家分:1
注 册:2010-1-6
收藏
得分:1 
#include<stdio.h>

int main()
{
    int i,j,b;
    printf("%3d",2);   
    for(i=3;i<=100;i+=2)
    {
        b=1;
        for(j=3;j*j<=i;j+=2)
            if(i%j==0)
            {
                b=0;
                break;
            }      
        if(b)        
            printf("%3d",i);        
    }
    printf("\n");
    return 0;
}
2012-12-21 10:58
SPWENG
Rank: 1
等 级:新手上路
帖 子:4
专家分:1
注 册:2010-1-6
收藏
得分:0 
#include<stdio.h>

int main()
{
    int i,j,b;
    printf("%3d",2);   
    for(i=3;i<=100;i+=2)
    {
        b=1;
        for(j=3;j*j<=i;j+=2)
            if(i%j==0)
            {
                b=0;
                break;
            }      
        if(b)        
            printf("%3d",i);        
    }
    printf("\n");
    return 0;
}
2012-12-21 10:59
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:1 
除了1和本身的问题,楼主是不是还有别的隐患。稍扩大i范围,判断15会咋样?

www.qunxingw.wang
2012-12-21 11:18
w527705090
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:11
帖 子:441
专家分:1882
注 册:2011-6-28
收藏
得分:1 
看来楼主的代码还是有很多的问题,提出来了就好自己思考思考。

有心者,千方百计;无心者,千难万难。
2012-12-21 15:48
dyh839911010
Rank: 2
来 自:武汉
等 级:论坛游民
帖 子:63
专家分:71
注 册:2011-9-14
收藏
得分:1 
2楼正解,不过我没学C++,对于true和false的用法不熟。

把简单做到纯粹,自然有生活的成就。
游戏开发吧诚邀各位的驻足!
2012-12-21 21:04
crystall
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:184
专家分:809
注 册:2012-12-1
收藏
得分:0 
回复 8楼 dyh839911010
并不是一定要用bool类型的, 用int 类型也可以啊, 只是在这种场合习惯了用bool型.
2012-12-22 11:47
conan8732
Rank: 2
等 级:论坛游民
帖 子:24
专家分:43
注 册:2012-8-8
收藏
得分:0 
主要是这个判断
if(i%j!=0)
i=10 j=3
该成if(j==i-1)
2013-01-11 15:23
快速回复:求一个数是否为素数,代码写好了,感觉好像没错,但实际上没结果的
数据加载中...
 
   



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

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