调用的时候(先弄掉2的倍数会少很多)
调用的时候,在筛一遍
记得把b的平方根先求出来,开始就开始用它。(不需要偏要弄到10000)
被筛的记得跳过,节省时间!!!
#include<math.h>
using namespace std;
int IsPrime(int n);
int main()
{
int a,b;
cin>>a>>b;
double k=sqrt(b);
int c[10001];
int i,j;
for(i=2;i<=k;i++)
{
c[i]=i;
}
int prime[10001]; //筛法求10000以内的素数
int num=0;
for(i=2;i<=k;i++)
{
if(c[i]!=0)
{
prime[num]=i;
num=num+1;
for(j=i+1;j<=k;j++)
{
if(c[j]%c[i]==0)
{
c[j]=0;
}
}
}
}
int d[250001]; //先弄掉2的倍数(节约时间)
int count=0;
for(j=a;j<=b;j++)
{
if(j==1)
{
continue;
}
if((j%2!=0&&j!=2)||j==2)
{
d[count]=j;
count++;
}
}
int x=count;
i=1; //用筛出来的数组再筛
while(i<=num-1)
{
for(count=0;count<=x;count++)
{
if(d[count]==0)
{
continue;
}
if(d[count]%prime[i]==0&&d[count]!=prime[i])
{
d[count]=0;
}
}
i++;
}
for(count=0;count<=x;count++) //输出了
{
if(d[count]!=0)
{
cout<<d[count]<<endl;
}
}
return(0);
}