令 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
#include <stdio.h>
#include <math.h>
#define MAXS 104729 //取这个数的原因是第10000个数就是104729,总体上还是挺坑的
/*
其间以空格分隔,但行末不得有多余空格。
.....每一行的行末同样不可以有空格。
*/
int is_leap(int n)
{
int j;
for(j = 2;j<=sqrt(n);j++)
{
if(n%j==0)
{
return 0;
}
}
return 1;
}
int main()
{
int arr[10001] = {0};
int i;
int point = 1;
for(i = 2 ; i <= MAXS ; i++)
{
if(is_leap(i))
{
arr[point++] = i;
}
}
int m,n;
int count = 0;
scanf("%d %d",&m,&n);
for(i = m;i <= n;i++)
{
count++;
printf("%d",arr[i]);
if(count%10 == 0)
printf("\n");
else if(i!=n){
printf(" ");
}
}
return 0;
}
更新了更加简洁版的C++版本
#include <cstdio>
#include <vector>
#include <iostream>
using namespace std;
bool prime(int n)
{
if(n < 2) return false;
for(int i = 2 ; i <=n/i;i++)
{
if(n%i==0) return false;
}
return true;
}
int main()
{
vector<int> v;
int count = 0; //统计当前存入数组中的素数个数
int pos = 2 ; //用于遍历当前数
int M,N;
cin >> M >> N;
while(count < N)
{
if(prime(pos))
{
count++;
if(count>=M)
{
v.push_back(pos);
}
}
pos++;
}
int temp = 0;
for(int i = 0; i < v.size();i++)
{
temp++;
if((temp%10)==1) cout <<v[i];
else cout<<" " << v[i];
if((temp%10)==0) cout <<endl; //不要忘记原先换行处也有一个空格
}
return 0;
}