注册 登录
编程论坛 C++教室

帮帮忙呀!求求,,,为什么不对?

大头0927 发布于 2010-12-08 00:11, 992 次点击
//实验1.5 编写程序ex1_5,功能是读入一个整数n
//,求0~n间的所有素数(只有1和它本身这两个因数的自然数叫做素数)。
#include<stdio.h>
main()

{int m,n,a=2;
 printf("n=? ");
 scanf("%d",&n);
 for(m=2;m<=n;m++)
 for(a=2;a<=m;a++)
 { if(m%a==0)
   break;
 printf("%d ",m); }
}
12 回复
#2
xanxus2010-12-08 10:29
举个例子吧,输入数字为5
a=2,3,4,5
执行
for(a=2;a<=m;a++)
{ if(m%a==0)
   break;
printf("%d ",m);
}
肯定会输出3次5啦
#3
li_danwang2010-12-08 11:38
#include<stdio.h>
#include<math.h>
main()

{
    int m,n,a=2;

    printf("n=? ");
    scanf("%d",&n);
    int k=sqrt(n);
    for(m=2;m<=n;m++)
        for(a=2;a<=k;a++)
        {    if(m%a==0)
                break;
        else if(a==k&&m%a!=0)
            printf("%d ",m);

        }
}
#4
zhoufeng19882010-12-08 11:58
程序代码:
//实验1.5 编写程序ex1_5,功能是读入一个整数n
//,求0~n间的所有素数(只有1和它本身这两个因数的自然数叫做素数)。

#include<stdio.h>


int main()
{
    int m, n, a = 2;
   
    printf("n=? ");
    scanf("%d",&n);
    for(m = 2; m <= n; m++)
    {
        int sign = 0;
        for( a = 2; a < m;a++)
        {
            if( m%a == 0)
            {
                sign = 1;
              break;
          }
          else
          {
              sign = 0;
          }
          /*打印的函数不应放在这个地方,举个例子, m = 33,
              m % 2 是不等于0的,但不代表它就是素数。应想起他方法处理
         
*/
            //printf("%d ",m);
        }
      
        if ( sign == 0)
        {
            printf("%d ", m);   
        }
    }
      
    return 0;
}
#5
kittel2010-12-08 13:18
回复 楼主 大头0927
{int m,n,a=2;
printf("n=? ");
scanf("%d",&n);
for(m=2;m<=n;m++){
    int tos=1;
for(a=2;a<m;a++)
 if(m%a==0)
 {tos=0;break;}
if(tos) printf("%d ",m);
}
}
#6
zhangyasong2010-12-08 15:42
#include<stdio.h>
int main()
{
int m,n,a=2;
printf("n=? ");
scanf("%d",&n);
for(m=2;m<=n;m++)
{
for(a=2;a<=m;a++)
{ if(m%a==0)
   break;
}
if(a==m)
printf("%d ",m);

 }
exit(0);
}

实际很简单,关键是你不能把printf放在第二个循环里面,放到第一个循环里面,然后判断下第二个循环是不是运行m次就行了,另外,实际不需要比较到m,只用循环到sqrt(m)就可以了,没有在代码上改动,你可以试下
#7
tansuo2010-12-09 00:07
你判断是否是素数的方法不对,不是看2到m之间有没有可以被整除的。按照你的程序运行2不是素数,其实2是素数,是最小的素数。你应该将第二个for循环的控制条件改一下,改成a<=sqrt(m);不过要加上头文件math.h.另外你的输出语句也不对。
#8
大头09272010-12-09 21:59
回复 2楼 xanxus
牛!!!!O(∩_∩)O非常谢谢啦!
#9
大头09272010-12-15 00:23
回复 3楼 li_danwang
结果不对呀!????????不过快出来了
#10
大头09272010-12-15 00:54
回复 4楼 zhoufeng1988
哇( ⊙o⊙ )一看就是高手,俺刚开始嘞,这么多花括号呀!不好搞!!!
#11
大头09272010-12-15 01:10
回复 4楼 zhoufeng1988
嗯嗯(⊙_⊙)看懂了,谢谢你!
#12
大头09272010-12-15 10:52
回复 4楼 zhoufeng1988
请问break跳到哪呀?return 0是什么意思呢?
#13
大头09272010-12-15 10:54
回复 4楼 zhoufeng1988
我试了一下!为什么return 0不要也可以呀?
1