欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PAT(乙级) 1013 数素数

程序员文章站 2024-03-15 15:32:54
...

题目内容

令 P​i​​ 表示第 i 个素数。现任给两个正整数 M≤N≤10^​4​​ ,请输出 P​M​​ 到 P​N​​ 的所有素数。

输入格式

输入在一行中给出 M 和 N,其间以空格分隔。

输出格式:

输出从 P​M​​ 到 P​N​​ 的所有素数,每 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

解题思路

(1)建立一个判断是否为素数的函数
(2)设置一个素数的计数器,当素数序号位于5到27之间时则进行记录

程序源码

#include <iostream>
#include <vector>
using namespace std;
int prime(int x){
	if(x<2)
		return 0;
	int i = 2;
	for(; i*i<=x; i++)
		if(x%i == 0)
			return 0;
	return 1;	
}
int main(void)
{
	int m, n;
	cin>>m>>n;
	int j = 0, i = 2; //i为数字,j为当前的素数个数 
	vector<int> p(n-m+1); //p为素数表 
	//处理过程 
	while(j != n){
		if(prime(i) == 1){
			j++;
			if(j>=m && j<=n)
				p[j-m] = i; 
		}
		i++;	
	}
	//输出
	j = 0;
	for(i = 0; i < n-m+1; i++)
	{
		if(j!=0)  cout<<" ";
		cout<<p[i];
		j++;
		if(j == 10){
			cout<<endl;
			j = 0;
		}		 
	}
	return 0;
}