对于一个正整数,如果它有且只有4个质因数(重复的质因数算一个),就叫它“开心数”。 给定一个正整数n(1000<=n<=1000000),求不大于n的所有开心数的个数。 c++代码
时间: 2024-09-16 08:05:53 浏览: 67
要编写一个C++程序来计算小于等于`n`的具有四个不同质因数(即没有重复)的“开心数”,我们需要执行以下步骤:
1. 创建一个函数来检查一个数是否为开心数,这涉及到分解质因数并计数。
2. 遍历从1到`n`的所有数,使用上述函数筛选出开心数。
3. 记录并返回开心数的数量。
下面是C++代码实现这个功能:
```cpp
#include <vector>
#include <iostream>
// 函数用来判断一个数是否有4个不同的质因数
bool isHappyNumber(int num) {
std::vector<int> factors; // 存储质因数
int count = 0;
while (num != 1 && num > 1) {
if (std::find(factors.begin(), factors.end(), num) == factors.end()) {
factors.push_back(num);
++count;
}
for (auto factor : factors) {
num %= factor;
if (num == 1)
break;
}
}
return count == 4;
}
int countHappyNumbers(int n) {
int count = 0;
for (int i = 2; i <= n; ++i) {
if (isHappyNumber(i))
++count;
}
return count;
}
int main() {
int n;
std::cout << "Enter a number between 1000 and 1000000: ";
std::cin >> n;
// 检查输入是否在范围内
if (n < 1000 || n > 1000000) {
std::cerr << "Invalid input, please enter a number between 1000 and 1000000.\n";
return 1;
}
int happyNums = countHappyNumbers(n);
std::cout << "There are " << happyNums << " happy numbers less than or equal to " << n << ".\n";
return 0;
}
```
运行这段代码时,请确保输入一个介于1000和1000000之间的数字。
阅读全文