搜索
查看: 838|回复: 10
打印 上一主题 下一主题

新人求助!!100内质数和??

[复制链接]
楼主
发表于 2014-8-16 10:05:17 | 显示全部楼层
本帖最后由 981013 于 2014-8-16 10:40 编辑

先贴修改后的代码:
[mw_shl_code=c,true]#include <stdio.h>
#include <stdlib.h>
int main()
{
    int x=2,z=0,n=0,y;
    while(x<=100)
    {
        for(y=1;y<=x;y++)
        {
            if(x%y==0)
                z=z+1; //求因数数量
        }
        if(z<=2) //判断是否为质数
        {
            n=x+n;
            printf("%d\n",n);
        }
        x=x+1;
        z=0;
    }
    system("pause");
    return 0;
}[/mw_shl_code]
沙发
发表于 2014-8-16 10:46:34 | 显示全部楼层
[mw_shl_code=c,true]z=0;[/mw_shl_code]
这句如果没有,则z保存的将是从 2到当前x的因数的个数 的和(就是2的因数个数+3的因数个数+...+x的因数个数),自然z不可能第二次<=2,因此每次循环后要把z清0,使z只保存x的因数个数
板凳
发表于 2014-8-16 10:50:26 | 显示全部楼层
slngen 发表于 2014-8-16 10:48
哦,我是没有初始化导致的吧??

是没有将z清0导致的,其实你完全可以把z声明为局部变量,像这样:
[mw_shl_code=c,true]#include <stdio.h>
#include <stdlib.h>
int main()
{
    int x=2,n=0,y;
    while(x<=100)
    {
        int z=0;//z在每次循环开始时创建,在循环结束后删除
        for(y=1;y<=x;y++)
        {
            if(x%y==0)
                z=z+1; //求因数数量
        }
        if(z<=2) //判断是否为质数
        {
            n=x+n;
            printf("%d\n",n);
        }
        x=x+1;
    }
    system("pause");
    return 0;
}[/mw_shl_code]
地板
发表于 2014-8-16 10:51:08 | 显示全部楼层
去看一下有关变量作用域的资料
5#
发表于 2014-8-18 13:35:51 | 显示全部楼层
嗨,强哥! 发表于 2014-8-17 15:33
质数应该包括1吧:
[mw_shl_code=c,true]#include
#include

质数不包括1,1既不是质数也不是合数
初中数学课本上是这样说的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表