这是我写的程序,思路是先判断题目范围内的所有数字是否为素数,是素数就算出从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]);
}
}
数组太大了, 这种算法不太好
换个思路吧
#include <stdio.h>