c语言求素数个数

这是我写的程序,思路是先判断题目范围内的所有数字是否为素数,是素数就算出从3到当前位置所有的素数个数,最后只需上限减下限值对应的素数即可,问题是程序无法正常运行,会直接弹出,求大神们帮忙看看,谢谢!#include<stdio.h>int isprime(int i){ int a; for(a=2;a<i;a++) if(i%a==0)break; if(a>=i)return 1; else return 0;}void main(){ int i,j,k; int a[1000000]={0}; j=0; for(i=3;i<=1000000;i++) { if(i%2!=0) if(isprime(i)==1) { a[i]=a[j]+1; j=i; } } int min,max,K,l; for(l=0;l<K;l++) { scanf("%d %d",&min,&max); printf("%d\n",a[max]-a[min]); }}

#include<stdio.h>

#include<math.h>

int a[1000001];

int isprime(int i)

{

int a;

for(a=2;a<=sqrt(i+1);a++)

  if(i%a==0)return 0;

return 1;

}

  main()

{

int i,j,k;

a[2]=1;

for(i=3;i<=1000000;i++)

  a[i]=a[i-1]+(i%2!=0&&isprime(i)==1);


int min,max,K,l;

for(l=0;l<K;l++)

{

scanf("%d %d",&min,&max);

printf("%d\n",a[max]-a[min]);

}

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-11-15

数组太大了, 这种算法不太好

换个思路吧

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int isprime(int i)
{
int a;
if(i==2)  //2也是素数,特殊情况 
{
return 1;
}
for(a=2;a<=sqrt(i);a++)
{
if(i%a==0)
{
return 0;
}
}
return 1;
}
void main()
{
int i,j=0,k,count=0,max,min,n;
printf("请输入有多少个样例: ");
scanf("%d",&n);
int *s;
s=(int*)malloc(sizeof(int)*n); //动态定义n大小的数组 
for(k=0;k<n;k++)
{
scanf("%d %d",&min,&max);
count=0;
for(i=min;i<=max;i++)
{
if(isprime(i)==1)
{
count++;
}
}
s[j++]=count;
}
for(i=0;i<n;i++)
{
printf("\n%d",s[i]);
}
}

第2个回答  2016-11-15
a需要的空间太大了,把它定义成全局的或动态申请。