PAT乙级1013 数素数 (20 分)

题目连接:https://pintia.cn/problem-sets/994805260223102976/problems/994805309963354112

令 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.第10000位素数是104729,所以开的数组要足够大
2.输出格式问题:注意N==M的情况

#include <iostream>
#define max 1000000
using namespace std;

int p[1001000] = {0}, cnt = 0, n[1001000] = {0};

int main(){
	int M, N;
	cin >> M >> N;
	//打素数表
	for(int i = 2; i > 0; i++){
		if(cnt >= N)	break;
		if(!n[i])	p[cnt++] = i;
		for(int j = 2*i; j < max; j += i)
			n[j] = 1;
	}
	//输出 
	int count = 1;
	for(int i = M-1; i < N-1; i++){
		cout << p[i];
		if(count % 10 && M!=N)
			cout << " ";
		else if(!(count%10))
			cout << endl;
		count++;
	}
	cout << p[N-1];
	return 0;
}```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值