| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 519 人关注过本帖
标题:c语言新手请教大神,素数筛选
只看楼主 加入收藏
林linking
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-10-26
结帖率:0
收藏
已结贴  问题点数:20 回复次数:6 
c语言新手请教大神,素数筛选
请问我这个求素数个数的筛选法哪里出错,求大神指教,麻烦修改一下。
ps:太深的我可能不会,才学了一个月。。

程序代码:
#include<stdio.h>
#include<math.h>
main()
{
    int i,j,x,num=0,a[100000],true,false;
    long n;
    scanf("%d",&n);
   a[2]=true;
    for(i=3;i<=n;i++)
    {
        if(i%2==0)
        a[i]=false;
        else a[i]=true;

    }
  for(i=3;i<=n;i++)
  {
      if(a[i]==true)
      for(j=2;j<=sqrt(i);j++)
      {if(i%j==0)
       a[i]=false;break;}
      if(j>sqrt(i))
      {a[i]=true;
      for(x=i+i;x<=n;x=x+i)
      a[x]=false;
      }
      }
  for(i=2;i<=n;i++)
  {if(a[i]==true)
   num++;
  }
  printf("%d",num);
}


[ 本帖最后由 林linking 于 2013-10-26 20:56 编辑 ]
搜索更多相关主题的帖子: c语言 color 
2013-10-26 19:37
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:4 
找个别人的算法,先看懂,这个论坛内就能找到

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-10-26 20:27
haiboself
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:193
专家分:196
注 册:2013-10-23
收藏
得分:4 
#define a 100
#include<stdio.h>
void main()
{
    int array[a];
    int i,j;
    for(i=0;i<a;i++)
        array[i]=i+1;
    for(i=0;i<a;i++)
    {
        if(array[i]!=1)
        {
            for(j=i+1;j<a;j++)
            {
                if(array[j]%array[i]==0)
                    array[j]=1;
            }
        }
    }
    j=0;
    printf("the result is:\n");
    for(i=0;i<a;i++)
    {
        if(array[i]!=1)
        {
            printf("%d  ",array[i]);
        j++;
        if(j%5==0)
            printf("\n");
        }
    }

}
2013-10-26 22:23
蔡梓锋
Rank: 4
等 级:业余侠客
帖 子:106
专家分:202
注 册:2013-4-20
收藏
得分:4 
你的想法应该是没有错,但是你的类型还不熟悉,ture和flase是bool型的,相当于关键字,不能随便定义。
#include<stdio.h>
#include<math.h>
int main()
{
    int i,j,x,num=0,a[100000],t,f;
    long n;
    scanf("%d",&n);
    a[2]=t;
    for(i=3;i<=n;i++)
    {
        if(i%2==0)    a[i]=f;
        else         a[i]=t;

    }
  for(i=3;i<=n;i++)
  {
      if(a[i]==t)
      for(j=2;j<=sqrt(i);j++)
      {      
          if(i%j==0)
          a[i]=f;break;
      }
      if(j>sqrt(i))
      {
            a[i]=t;
          for(x=i+i;x<=n;x=x+i)
          a[x]=f;
      }
  }
  for(i=2;i<=n;i++)
  {
      if(a[i]==t)
    num++;
  }
   printf("%d",num);
   return 0;
}

[ 本帖最后由 蔡梓锋 于 2013-10-26 23:44 编辑 ]

加油加油!
2013-10-27 07:32
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:4 
多看看例子
2013-10-27 08:32
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:4 
楼上那么多,我就不给你粘代码了,建议你多看经典的代码,体会思想

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-10-27 15:45
chenwei435
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:322
专家分:1611
注 册:2010-11-28
收藏
得分:4 
不用这么复杂,很简单,不过要排除1,1既不是质数,也不是合数
程序代码:
#include <stdio.h>
int sushu(int x);
void main()
{
    int shu,count=-1;
    scanf("%d",&shu);
    for(int i=1;i<=shu;i++)
    {
        if(!sushu(i))
        {
            count++;
        }
    }
    printf("%d\n",count);
}
int sushu(int x)
{
    int boolean=0;
    for(int i=2;i<x;i++)
    {
        if(x%i==0)
            boolean++;
    }
    return boolean;
}


[ 本帖最后由 chenwei435 于 2013-10-28 22:36 编辑 ]
2013-10-28 22:33
快速回复:c语言新手请教大神,素数筛选
数据加载中...
 
   



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

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