描述:
用筛法求[a,b]中的素数。
Find out the prime numbers in [a, b].
输入:
2个正整数:a b。
a、b均在1000以内,且a小于等于b。
2 positive integers: a, b. Both a and b are less than or equal 1000 and a is less than or equal to b.
输出:
[a b]区间内的所有素数,每个单独一行。
All primes in [a, b], each one in a row.
输入样例:
2 5
输出样例:
2 3 5
//发现当时甚至不是用筛法写的2333 2018.8.9
#include<iostream>
using namespace std;
int pansushu(int i);
int main()
{
int a,b,i,j;
int s[1001];
cin>>a>>b;
//先判断i是不是素数,是的话让i的倍数的数组=0,令s[i]=1,不是则进入i=i+1
for(i=2;i<=b;i++)
{
if(pansushu(i)==1) //i是素数,倍数数组为0 ,s[i]=1
{
s[i]=1;
for(j=i*2;j<=b;j=j+i)
{
s[j]=0;
}
}
if(s[i]==0) //i不是素数,进入i=i+1
{
continue;
}
}
for(j=2;j<=b;j++)
{
if(s[j]==1&&j>=a)
{
cout<<j<<endl;
}
}
}
int pansushu(int i)
{
int j,flag=1;
for(j=2;j<i;j++)
{
if(i%j==0)
{
flag=0;
break;
}
}
if(flag==1)
return(1);
if(flag==0)
return(0);
}
重新用筛法做了一遍
#include <iostream>
#include <cstring>
using namespace std;
#define MAXNUM 1010
bool isprime[MAXNUM];
void getPrime()
{
memset(isprime, true, sizeof(isprime));
isprime[0]=isprime[1]=false;
for(int i=2; i<=MAXNUM/i; i++)
{
if(isprime[i])
{
for(int j=i*i; j<MAXNUM; j=j+i)
isprime[j]=false;
}
}
}
int main()
{
int a, b;
getPrime();
while(cin>>a>>b)
{
for(int i=a; i<=b; i++)
{
if(isprime[i])
cout<<i<<endl;
}
}
}