| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1260 人关注过本帖
标题:求解输出 200 以内的素数问题
只看楼主 加入收藏
珈蓝听雨
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2014-5-17
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:11 
求解输出 200 以内的素数问题
以下为我的程序
#include <stdio.h>
void main (){
     int n=2,x=2,y=0,z;
     while(n<=200){
   while(x<n){
       z=n%x;
       if(z==0)
       y=y+1;
       else
       y=y+0;
       x++;
   }
   if(y==0)
   printf("%d ",n);
   n++;
   y=0;
     }
}
结果有问题,请问哪里错了
搜索更多相关主题的帖子: include 
2014-05-17 21:36
砖家的谎言
Rank: 12Rank: 12Rank: 12
等 级:禁止访问
威 望:30
帖 子:693
专家分:3898
注 册:2013-12-6
收藏
得分:0 
#include<stdio.h>

void main()
{
    int i, j, k=0;
    for (i = 2; i <= 200;i++)
    {
        j = 2;
        while (i%j != 0)
            j++;
        if (i == j)
        {
            printf("%8d", i);
            k++;
            if (k % 7 == 0)
                printf("\n");
        }
            
    }

我不是砖家,要努力成为砖家。
2014-05-17 21:40
fangfine
Rank: 1
等 级:新手上路
帖 子:3
专家分:5
注 册:2014-5-17
收藏
得分:5 
if(z==0)       y=y+1;break;
这个地方缺少一个break语句跳出循环;
另外 这个语句冗余 /* else       y=y+0;*/
改后:
#include <stdio.h>
void main ()
{int n=2,x=2,y=0,z;
     while(n<=200)
{while(x<n)
     {z=n%x;
       if(z==0)       y=y+1;break;
      /* else       y=y+0;*/
       x++;
     }
     if(y==0)
     printf("%d ",n);
     n++;
     y=0;
}
}
2014-05-17 23:02
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
x 赋值为2 应该放在外层循环内部。 y 变量虽然求得了除1和n外的因子数,但仅仅用于确认素数,纯属多余。
#include <stdio.h>
int main ( void )
{
    int n = 2, x, y = 0, z;
    while ( n <= 200 ) {
        x = 2;
        while ( x < n ) {
            z = n % x;
            if ( z == 0 )
                y = y + 1;
            x++;
        }
        if ( y == 0 )
            printf( "%d ", n );
        n++;
        y = 0;
    }
    return 0;
}
2014-05-18 00:24
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
一个精简的版本如下:

#include <stdio.h>
int main ( void )
{
    int n, x;
    for ( n = 2; n <= 200; n++ ) {
        for ( x = 2; x < n && n % x; x++ ) ;
        if ( x >= n ) printf( "%d ", n );
    }
    return 0;
}

请注意 main 函数的形式,尽量写成符合 C 标准的形式。
2014-05-18 00:26
dongshimou
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:44
专家分:152
注 册:2014-1-8
收藏
得分:0 
bool prime[201];
prime[1]=1;
for(int i=2;i<201;i++)
for(int j=2;i*j<201;j++)
prime[i*j]=1;

for(int i=1;i<201;i++)
if(!prime[i])printf("%d ",i);
2014-05-20 11:54
dongshimou
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:44
专家分:152
注 册:2014-1-8
收藏
得分:0 
以下是引用dongshimou在2014-5-20 11:54:10的发言:

bool prime[201];
prime[1]=1;
for(int i=2;i<201;i++)
for(int j=2;i*j<201;j++)
prime[i*j]=1;

for(int i=1;i<201;i++)
if(!prime)printf("%d ",i);


C++ only。(bool  and for(int ))

[ 本帖最后由 dongshimou 于 2014-5-20 22:21 编辑 ]
2014-05-20 12:17
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
以下是引用dongshimou在2014-5-20 12:17:50的发言:

 
 
C++ only。(bool  and for(int ))
Not correct, C99 is supported.
2014-05-20 18:23
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
以下是引用dongshimou在2014-5-20 11:54:10的发言:

bool prime[201];
prime[1]=1;
for(int i=2;i<201;i++)
for(int j=2;i*j<201;j++)
prime=1;
 
for(int i=1;i<201;i++)
if(!prime)printf("%d ",i);
And your code is not safe, such as:
    prime[i*j]=1;
when i == 200, and j == 200, you access prime[200*200].
2014-05-20 18:34
晓小晓小
Rank: 2
等 级:论坛游民
帖 子:12
专家分:38
注 册:2014-5-15
收藏
得分:0 
回复 2 楼 砖家的谎言
告诉我为什么if语句那里是j==j吗?
2014-05-20 19:55
快速回复:求解输出 200 以内的素数问题
数据加载中...
 
   



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

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