优化下面这段代码: #include <iostream> using namespace std; int main() { int num; int result = true; cout << "请输入一个数字:"<< endl; cin >> num; int i = 2; while (i < num) { if (num % i == 0) { result = false; break; } else { i++; } } if (result) { cout << num << "是质数" << endl; } else { cout << num << "不是质数" << endl; } }
时间: 2024-04-10 15:27:00 浏览: 12
优化后的代码如下所示:
```cpp
#include <iostream>
using namespace std;
bool isPrime(int num)
{
if (num < 2) {
return false;
}
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
int main()
{
int num;
cout << "请输入一个数字:" << endl;
cin >> num;
if (isPrime(num)) {
cout << num << "是质数" << endl;
}
else {
cout << num << "不是质数" << endl;
}
return 0;
}
```
这里进行了几个优化:
1. 引入了 `isPrime` 函数,用于判断一个数字是否为质数。这样可以将判断质数的逻辑封装起来,提高代码的可读性和复用性。
2. 在判断质数时,只需要循环到 `sqrt(num)` 即可,因为如果一个数不是质数,那么它一定可以分解成两个因子,其中一个因子必定小于等于它的平方根。
3. 在输出结果时,使用了更加简洁的方式,避免了使用额外的变量。
相关问题
#include <iostream> #include <vector> #include <algorithm> #include <sstream> using namespace std; bool isValidSet(int a, int b, int c) { return (a == b && b == c) || (a + 1 == b && b + 1 == c); } string checkHu(vector<int>& nums) { int n = nums.size(); if (n % 3 != 2) { return "XIANGGONG"; } sort(nums.begin(), nums.end()); for (int i = 0; i < n - 5; i += 3) { if (!isValidSet(nums[i], nums[i + 1], nums[i + 2])) { return "BUHU"; } } if (nums[n - 2] != nums[n - 1]) { return "BUHU"; } return "HU"; } int main() { vector<int> nums; string line; string result; while (true) { getline(cin, line); if (line == "0") { break; } stringstream ss(line); int num; while (ss >> num) { nums.push_back(num); } result = checkHu(nums); cout << result << endl; nums.clear(); } return 0; }如何加以定义个数字的数量不超过4个,集合中元素的数量不超过14个
可以在读入每一行的数字后,统计每个数字出现的次数,如果有任何一个数字的出现次数超过了4次,直接返回"BUHU";同时,如果集合中元素的数量超过了14个,也直接返回"BUHU"。代码如下:
```
#include <iostream>
#include <vector>
#include <algorithm>
#include <sstream>
#include <unordered_map> // 添加头文件以使用 unordered_map
using namespace std;
bool isValidSet(int a, int b, int c) {
return (a == b && b == c) || (a + 1 == b && b + 1 == c);
}
string checkHu(vector<int>& nums) {
int n = nums.size();
if (n % 3 != 2) {
return "XIANGGONG";
}
// 使用 unordered_map 统计数字出现次数
unordered_map<int, int> count;
for (int num : nums) {
count[num]++;
if (count[num] > 4) {
return "BUHU";
}
}
if (count.size() > 14) { // 判断集合中元素数量是否超过14个
return "BUHU";
}
sort(nums.begin(), nums.end());
for (int i = 0; i < n - 5; i += 3) {
if (!isValidSet(nums[i], nums[i + 1], nums[i + 2])) {
return "BUHU";
}
}
if (nums[n - 2] != nums[n - 1]) {
return "BUHU";
}
return "HU";
}
int main() {
vector<int> nums;
string line;
string result;
while (true) {
getline(cin, line);
if (line == "0") {
break;
}
stringstream ss(line);
int num;
while (ss >> num) {
nums.push_back(num);
}
result = checkHu(nums);
cout << result << endl;
nums.clear();
}
return 0;
}
```
#include <iostream> #include <vector> #include <algorithm> #include <sstream>使用命名空间 std;bool isValidSet(int a, int b, int c) { return (a == b && b == c) ||(a + 1 == b && b + 1 == c);} string checkHu(vector<int>& nums) { int n = nums.size(); if (n % 3 != 2) { return “xianggong”; } sort(nums.begin(), nums.end()); for (int i = 0; i < n - 5; i += 3) { if (!isValidSet(nums[i], nums[i + 1], nums[i + 2])) { return “BUHU”; } } if (nums[n - 2] != nums[n - 1]) { return “BUHU”; } return “HU”; } int main() { vector<int> nums; string line; string result; while (true) { getline(cin, 行);if (line == “0”) { break; } stringstream ss(line);整数;while (ss >> num) { nums.push_back(num); } result = checkHu(nums);cout <<结果<< endl;nums.clear();} 返回 0;}如何加以定义个数字的数量不超过4个,集合中元素的数量不超过14个不用返回不胡
如果我们想在 checkHu 函数中判断数字的数量和集合中元素的数量是否符合要求,但是不需要返回 "BUHU" 或 "HU",只需要在 checkHu 函数中进行判断即可。修改后的代码如下:
```
#include <iostream>
#include <vector>
#include <algorithm>
#include <sstream>
#include <unordered_map>
using namespace std;
bool isValidSet(int a, int b, int c) {
return (a == b && b == c) || (a + 1 == b && b + 1 == c);
}
void checkHu(vector<int>& nums) { // 修改返回值类型为 void
int n = nums.size();
if (n % 3 != 2) {
cout << "XIANGGONG" << endl; // 直接输出结果
return;
}
unordered_map<int, int> count;
for (int num : nums) {
count[num]++;
if (count[num] > 4) {
cout << "XIANGGONG" << endl;
return;
}
}
if (count.size() > 14) {
cout << "XIANGGONG" << endl;
return;
}
sort(nums.begin(), nums.end());
for (int i = 0; i < n - 5; i += 3) {
if (!isValidSet(nums[i], nums[i + 1], nums[i + 2])) {
cout << "XIANGGONG" << endl;
return;
}
}
if (nums[n - 2] != nums[n - 1]) {
cout << "XIANGGONG" << endl;
return;
}
cout << "OK" << endl; // 输出结果为 OK
}
int main() {
vector<int> nums;
string line;
while (true) {
getline(cin, line);
if (line == "0") {
break;
}
stringstream ss(line);
int num;
while (ss >> num) {
nums.push_back(num);
}
checkHu(nums); // 调用 checkHu 函数,不需要接收返回值
nums.clear();
}
return 0;
}
```