本题要求实现一个判断素数的简单函数,以及利用该函数判断给定区间整数是否是素数,并按一行5个进行输出的函数。 素数:只能被1和自身整除的正整数,1不是素数,2是素数 函数接口定义: int IsPrime(int x); void PrintPrime(int m,int n); 其中,函数IsPrime,当x是素数时返回1,否则返回0;函数PrintPrime输出区间[m,n]内的所有素数,按一行5个进行输出,同时要求输出的每列数据左对齐,若在此区间内没有素数,则输出“在此区间不存在素数”的提示信息。 要求:main函数中输入两个正整数m和n,调用函数PrintPrime输出结果,函数PrintPrime需调用IsPrime函数来判定区间[m,n]内整数是否为素数。
时间: 2024-02-17 19:03:19 浏览: 85
以下是完整的代码实现:
```c++
#include <iostream>
using namespace std;
int IsPrime(int x) { // 判断素数
if (x < 2) {
return 0; // 不是素数
}
for (int i = 2; i * i <= x; i++) {
if (x % i == 0) {
return 0; // 不是素数
}
}
return 1; // 是素数
}
void PrintPrime(int m, int n) { // 输出区间内的素数
int count = 0; // 记录当前行已输出的素数个数
int exist = 0; // 是否存在素数
for (int i = m; i <= n; i++) {
if (IsPrime(i)) {
exist = 1; // 存在素数
cout << i << " ";
count++;
if (count == 5) {
cout << endl;
count = 0;
}
}
}
if (!exist) {
cout << "在此区间不存在素数" << endl;
} else if (count != 0) { // 输出最后一行的换行符
cout << endl;
}
}
int main() {
int m, n;
cin >> m >> n;
PrintPrime(m, n);
return 0;
}
```
实现思路:
1. `IsPrime` 函数:从2到 $\sqrt{x}$ 遍历,如果有某个数可以整除x,则x不是素数,返回0;否则遍历完后返回1,表示x是素数。
2. `PrintPrime` 函数:从m到n遍历每个数,如果是素数则输出,输出5个后换行,继续遍历。如果一行不满5个,输出最后一行的换行符,如果区间内没有素数,输出提示信息。
注意事项:
1. 在判断素数时,可以从2开始遍历,但是遍历到 $\sqrt{x}$ 就可以停止了,因为如果在 $\sqrt{x}$ 之前没有数可以整除x,那么 $\sqrt{x}$ 之后也不可能有。
2. 在输出的过程中,需要记录当前行已输出的素数个数,以及是否存在素数,以便输出提示信息。
阅读全文