酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

C++输出个位十位平方和为质数的两位数实现及优化建议

好的,这个问题是一个典型的C++基础编程练习题,核心逻辑是**遍历两位数**,然后**判断个位、十位数字平方和是否为质数**。 下面我会给出完整的C++代码,并逐段解释关键点。 --- ## 🧠 解题思路 1. **两位数范围**:从10到99。 2. **提取数字**: - 十位:`num / 10` - 个位:`num % 10` 3. **计算平方和**:`十位² + 个位²` 4. **判断质数**:质数是指大于1的自然数,且只能被1和自身整除。对于平方和(范围 0~162),只需检查是否有2到sqrt(和)之间的因子即可。 5. **输出**:满足条件的数按从小到大输出,每个占一行。 --- ## 💻 C++ 实现 ```cpp #include <iostream> #include <cmath> using namespace std; // 判断一个数是否为质数 bool isPrime(int n) { if (n < 2) return false; // 0和1不是质数 if (n == 2) return true; // 2是质数 if (n % 2 == 0) return false; // 偶数(除2外)不是质数 // 检查奇数因子,只需到sqrt(n) for (int i = 3; i <= sqrt(n); i += 2) { if (n % i == 0) return false; } return true; } int main() { // 遍历所有两位数 for (int num = 10; num <= 99; num++) { int tens = num / 10; // 十位 int ones = num % 10; // 个位 int sum = tens * tens + ones * ones; // 数字平方和 if (isPrime(sum)) { cout << num << endl; } } return 0; } ``` --- ## 📘 代码详细解释 - **isPrime函数**: - 如果n < 2,直接返回`false`。 - 如果n == 2,是质数。 - 如果n是偶数且大于2,不是质数。 - 用`for`循环从`i=3`开始,每次加2(只检查奇数),直到`i*i <= n`,如果n能被i整除则不是质数。 - 这里使用`sqrt(n)`作为循环上限是为了效率。由于平方和最大为`9²+9²=162`,循环次数很少,性能无影响。 - **主循环**: - 从10到99,依次取出十位和个位。 - 计算平方和`sum`。 - 如果`sum`是质数,则输出该两位数。 --- ## 🔍 结果验证(部分输出) 运行程序后,你会得到类似这样的输出(部分): ``` 10 11 12 13 14 15 16 17 18 20 ... ``` 你可以自己运行验证,确保所有输出都是按升序排列的。 --- ## ⚠️ 开发建议与注意事项 - **边界条件**:题目明确要求“两位数”,所以从10开始,到99结束,不需要考虑个位数或三位数。 - **质数判断优化**:虽然本题数据范围很小,但为了体现良好的编程习惯,我使用了`sqrt(n)`作为循环上限,并跳过了偶数。 - **代码可读性**:将质数判断封装成独立函数,让主逻辑更清晰。 - **输出格式**:每个数占一行,用`endl`或`'\n'`。 --- ## 📚 扩展思考 你可以尝试修改题目条件,例如: - 改成“个位、十位上数字的立方和是质数”。 - 要求输出所有三位数中满足类似条件的数。 这些都能巩固你对循环、取模/除法运算和质数判断的理解。 --- ######[AI写代码神器 | 901点数解答 | 2026-08-28 20:43:43]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]