解决方案:

  1. 首先,我们需要编写一个函数来判断一个数字是否为素数。可以使用一个循环从2到该数字的平方根进行遍历,判断是否有能整除该数字的因子。
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;
}
  1. 接下来,我们需要编写一个函数来交换数字字符串中的两个字符,然后将交换后的字符串转换为整数。
int swapDigits(int num, int i, int j) {
    string numStr = to_string(num);
    swap(numStr[i], numStr[j]);
    return stoi(numStr);
}
  1. 然后,我们可以编写一个函数来生成所有可能的无暇素数。我们可以通过两个嵌套的循环来遍历数字字符串中的每一位数字,并在每次循环中调用上述的交换函数和素数判断函数。
vector<int> generateFlawlessPrimes(string numStr) {
    vector<int> flawlessPrimes;
    int length = numStr.length();
    for (int i = 0; i < length; i++) {
        for (int j = i + 1; j < length; j++) {
            int swappedNum = swapDigits(stoi(numStr), i, j);
            if (isPrime(swappedNum)) {
                flawlessPrimes.push_back(swappedNum);
            }
        }
    }
    return flawlessPrimes;
}
  1. 最后,我们可以在主函数中读取输入的数字字符串,并调用上述函数来生成并输出所有的无暇素数。
int main() {
    string numStr;
    cin >> numStr;
    vector<int> flawlessPrimes = generateFlawlessPrimes(numStr);
    for (int i = 0; i < flawlessPrimes.size(); i++) {
        cout << flawlessPrimes[i];
        if (i < flawlessPrimes.size() - 1) {
            cout << ',';
        }
    }
    return 0;
}

完整的代码如下:

#include <iostream>
#include <vector>
#include <string>
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 swapDigits(int num, int i, int j) {
    string numStr = to_string(num);
    swap(numStr[i], numStr[j]);
    return stoi(numStr);
}

vector<int> generateFlawlessPrimes(string numStr) {
    vector<int> flawlessPrimes;
    int length = numStr.length();
    for (int i = 0; i < length; i++) {
        for (int j = i + 1; j < length; j++) {
            int swappedNum = swapDigits(stoi(numStr), i, j);
            if (isPrime(swappedNum)) {
                flawlessPrimes.push_back(swappedNum);
            }
        }
    }
    return flawlessPrimes;
}

int main() {
    string numStr;
    cin >> numStr;
    vector<int> flawlessPrimes = generateFlawlessPrimes(numStr);
    for (int i = 0; i < flawlessPrimes.size(); i++) {
        cout << flawlessPrimes[i];
        if (i < flawlessPrimes.size() - 1) {
            cout << ',';
        }
    }
    return 0;
}
C++代码实现寻找无暇素数

原文地址: https://www.cveoy.top/t/topic/jglW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录