题目:
令Pi表示第i个素数。现任给两个正整数M <= N <= 104,请输出PM到PN的所有素数。
输入格式:
输入在一行中给出M和N,其间以空格分隔。
输出格式:
输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。
输入样例:
5 27
输出样例:
11 13 17 19 23 29 31 37 41 43
47 53 59 61 67 71 73 79 83 89
97 101 103
计算N以内的素数的方法
寻找素数的算法都需要遍历,减小判断的次数才是关键。
1.素数的定义:任何一个大于1的自然数中除了1和本身之外没有其他的因子
for(i=2;i<n;i++)
{
for(j=2;j<i+1;j++)
if(i%j==0) break;
if(j==i+1) cout<<j;
}
2.试图利用素数的性质减小循环次数
for(i=2;i<n;i++)
{
for(j=2;j<sqrt(n);j++)
if(i%j==0) break;
if(j==i+1) cout<<j;
}
3.简单的素数的筛选法
bool* p=new bool [n+1];
for(i=0;i<n+1;i++)
p[i]=true;
p[0]=p[1]=false;
for(i=2;i<sqrt(n);i++)
for(j=i+i;j<n+1;j=j+i)
p[j]=false
for(i=0;i<n+1;i++)
if(p[i]) cout<<i;
```
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
int main()
{
const int n=1000001;
int M,N;
cin>>M>>N;
bool* P;
P=new bool [n];
int i,j,k;
for(i=0;i<n;i++)
P[i]=true;
P[0]=P[1]=false;
for(i=2;i<sqrt(n);i++)
for(j=i+i;j<n;j=j+i)
P[j]=false;
j=0;
k=0;
for(i=0;i<n;i++)
{
if(P[i])
{
j++;
if(j>M-1&&j<N+1)
{
if(k)
{
if(k%10==0) cout<<'\n';
else cout<<' ';
}
k++;
cout<<i;
}
}
}
return 0;
}