标题:求教,关于筛法求素数C
只看楼主
huicpc0876
Rank: 2
等 级:论坛游民
帖 子:69
专家分:50
注 册:2009-7-24
结帖率:92.59%
已结贴  问题点数:20 回复次数:1 
求教,关于筛法求素数C
题目:处于相邻的两个素数p和p + n之间的n - 1个连续的合数所组成的序列我们将其称为 长度为n的素数槽。例如,< 24, 25, 26, 27, 28 >是处于素数23和素数29之间的一 个长度为6的素数槽。
写一个程序来计算包含整数k的素数槽的长度。如果k本身就 是素数,那么认为包含k的素数槽的长度为0。

Input
第一行是一个数字n,表示需要测试的数据的个数。后面有n行,每行是一个正整数k , k大于1并且小于或等于的第十万个素数(也就是1299709)。
Output
对于输入部分输入的每一个k,都对应输出一个非负整数,表示包含k的素数槽的长 度,每个非负整数占一行。

Sample Input
5
10
11
27
2
492170
 
Sample Output
4
0
6
0
114
 附注:此题目时间限制是2秒,所以想到用筛法。

我的错误的代码,求高人看看错在哪
#include<stdio.h>
#include<math.h>
int a[1299710]; //这个程序不用筛法估计要十秒,但是用筛法了反而跑不出来,求高人指点
int main()
{ __int64 m=2,n,s,k,i,j,max,min,bb;
  a[0]=a[1]=1;
 for(m=2;m<1299710;m++)
{ if(!a[m])//当a【0】没有被标记,执行下面语句
    {for(j=2;j<=sqrt(m);j++)
        if(m%j==0)
            break;
        if(j>sqrt(m))
          {  a[m]=0;
              i=m;
             bb=m*i;
            for(;bb<1299710;i++)
            { bb=m*i;
             a[bb]=1;}//如果是素数就标记为零,把素数的倍数标记为1
            }
     }
} //筛法部分

//for(i=0;i<50;i++)
// printf("*%d*",a[i]);     
scanf("%I64d",&n);
while(n--)
  {
    scanf("%I64d",&k);
    s=k;
    if(!a[k])
        printf("0\n");
    if(a[k])
    {
        while(a[s]&&s>1)
                 s--;
        min=s;
        while(a[k]&&k<1299710)
                 k++;
        max=k;
        printf("%I64d\n",max-min);
    }     
  }
return 0;
}
搜索更多相关主题的帖子: 筛法 素数 
2009-08-06 17:24
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
得分:20 
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX 1299710
long flag[MAX];

int main()
{
 long i,j,n,k,cnt,temp;
 temp=(long)sqrt(MAX);
 for(i=3;i<temp;i+=2)
    for(j=i*i;j<MAX;j+=i)
        flag[j]=1;
 for(i=4;i<MAX;i+=2)
    flag[i]=1;
 scanf("%ld",&n);
 while(n--)
 {
  scanf("%ld",&k);
  cnt=0;
  if(flag[k]==0) {printf("%ld\n",cnt);continue;}
  for(i=k;flag[i++];++cnt);
  for(i=k-1;flag[i--];++cnt);
  printf("%ld\n",++cnt);
 }
 system("pause");
 return 0;
}

[ 本帖最后由 godbless 于 2009-8-6 23:37 编辑 ]
2009-08-06 23:31



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-281835-1-1.html




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

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