| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1938 人关注过本帖
标题:求助:用筛选取法求100之内的素数。
只看楼主 加入收藏
evanstacy
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2008-7-13
收藏
 问题点数:0 回复次数:9 
求助:用筛选取法求100之内的素数。
求助:用筛选取法求100之内的素数。
我的编程如下:
 #include<stdio.h>
#include<math.h>                             /*程序中用到求平方根函数sqrt*/
void main()
{
int i,j,n,a[101];                            /*定义a数组包含101个元素*/
for(i=1;i<=100;i++)                          /*a[0]不用,只用a[1]到a[100]*/
  a[i]=i;                                    /*使a[1]到a[100]的值为1到100*/
  a[1]=0;                                    /*先"挖掉"a[1]*/
  for(i=2;i<sqrt(100);i++)
    for(j=i+1;j<=100;j++)
       {
          if(a[j]%a[i]==0)
             a[j]=0;
            }

    for(i=1,n=0;i<=100;i++)
     {if(a[i]!=0)
       {printf("%5d",a[i]);
        n++;}
    if(n==10)
    {printf("\n");
    n=0;}
    }
    printf("\n");
}

运行的时候不行的,没有显示的,有哪位高手帮我看一下并指出错误阿,谢谢。
搜索更多相关主题的帖子: 素数 取法 筛选 
2008-07-25 12:00
wangyinshiwo
Rank: 1
等 级:新手上路
帖 子:75
专家分:0
注 册:2007-11-9
收藏
得分:0 
for(j=i+1;j<N;j++)
    {
        if(a[i]!=0&&a[j]!=0)
        if(a[j]%a[i]==0)     
        a[j]=0;
    }
自己看看。

抽刀断水水更流,举杯消愁愁更愁。
2008-07-25 13:12
xiaomengxia2008
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2008-7-23
收藏
得分:0 
#include "math.h"
main()
{
 int m,i,k,h=0,leap=1;
 printf("\n");
 for(m=0;m<=100;m++)
  { k=sqrt(m+1);
   for(i=2;i<=k;i++)
     if(m%i==0)
      {leap=0;break;}
   if(leap) {printf("%-4d",m);h++;
        if(h%10==0)
        printf("\n");
        }
   leap=1;
  }
 printf("\nThe total is %d",h);
}
2008-07-25 15:58
gaia
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-7-25
收藏
得分:0 
哪里有问题调试一下就知道了,而且你的代码太复杂了。
这我以前写的,和你的要求有些不同,但区别不大

#include <stdio.h>
#include <stdlib.h>


/*输入一个数,输出该数内的素数*/
int main()
{
    unsigned long num;
    unsigned long prime;

    printf ("Enter a integer to analyze (q to quit):\n");

    while (scanf ("%lu", &num) == 1)
    {
        if (num == 1)
        {
            printf ("1 is neither a ssubmultiple nor a prime.\n");
        }

        else
        {
            for (prime = 2; prime <= num; prime++)
            {
                if (prime == 2)
                {
                    printf ("2 is a prime.\n");
                }

                if ((num % prime != 0) && (prime % 2 != 0))
                {
                    printf ("%lu is a prime.\n", prime);
                }
            }
        }

        printf ("Enter another integer to analyze (q to quit): \n");
    }
    return 0;
}

事实上这个还不是很好,可以先求出约数,剩下的就是素数。

[[it] 本帖最后由 gaia 于 2008-7-26 11:11 编辑 [/it]]
2008-07-26 11:01
寒秋
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2008-4-19
收藏
得分:0 
#include<stdio.h>
#include<math.h>
void main()
{
    int m,k,i,n=0;
    for(m=1;m<=100;m=m+2)
    {
        k=sqrt(m);
        for(i=2;i<=k;i++)
            if(m%i==0)
                break;
            if(i>=k+1)
            {
                printf(" %d",m);
                n=n+1;
            }
            if(n%10==0)
                printf("\n");
    }
    printf("\n");
}
随便看看
2008-07-26 14:14
rookie_coder
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2008-7-26
收藏
得分:0 
在dev-C++通过的,看看吧,提提建议
#include <stdio.h>
#include <stdlib.h>
#define MAX 22500
int main(void)
{
    int sieve[MAX],k,i,tk=2,range;
   
    printf("enter input range: ");
    scanf("%d",&range);
   
    //初始化筛子
    for (i=2;i<=range;++i)
        sieve[i]=1;
   
    while(tk<=range){
        k=tk;
    if(sieve[tk]==1)
    {
        printf("%d ",tk);
    }
        while(k<=range){
        sieve[k]=-1;/*筛出不是素数的*/
        k+=tk;
        }
        ++tk;
    }

    system("PAUSE");
return 0;
}
2008-07-27 00:45
evanstacy
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2008-7-13
收藏
得分:0 
回复 2# wangyinshiwo 的帖子
我想请问一下,那个a[i]和a[j]就是1到100之间的数来的阿,本来就不为0的阿.为什么还要加上 if(a[i]!=0&&a[j]!=0)这一行阿???

软件设计师 君羊:36405332
2008-07-27 02:11
evanstacy
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2008-7-13
收藏
得分:0 
按照2楼那位朋友说的加上if(a[i]!=0&&a[j]!=0)这一行是正确的,但是我不知道为什么要加上这一行,请能再指点一下我吗,谢谢!!!

软件设计师 君羊:36405332
2008-07-27 02:13
carmen0531
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2008-7-22
收藏
得分:0 
我知道了
  if(a[j]%a[i]==0)
        a[j]=0;时
a[j]=0会是使a[i]后面的非素数变为0,当i+1后,原来的非素数a[i]现在就变为0,但式子a[j]%a[i]==0中除数a[i]不能为0,所以如果不加 if(a[i]!=0)  就会出现溢出(还是错误?)

          if(a[i]!=0)
          {
              if(a[j]%a[i]==0)       <<<---------
              {
                    a[j]=0;
              }
          }


其实只要这样就好了。
2008-07-27 03:14
快速回复:求助:用筛选取法求100之内的素数。
数据加载中...
 
   



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

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