|
发表于 2023-11-5 21:47:50
|
显示全部楼层
你的代码有一个问题,即你的函数f(t)只判断了t是否为素数,但题目要求的是判断相邻元素之和是否为素数。所以你需要修改你的代码逻辑。
你可以在计算相邻元素之和时,调用函数f()来判断是否为素数。如果相邻元素之和不是素数,则增加计数器res的值。
修改后的代码如下:
- #include <bits/stdc++.h>
- using namespace std;
- bool isPrime(int num) {
- if (num <= 1) {
- return false;
- }
- for (int i = 2; i * i <= num; i++) {
- if (num % i == 0) {
- return false;
- }
- }
- return true;
- }
- int main() {
- int n, res = 0;
- cin >> n;
- vector<int> a(n);
- for (int i = 0; i < n; i++) {
- a[ i] = i + 1;
- }
- do {
- bool flag = true;
- for (int i = 0; i < n - 1; i++) {
- if (isPrime(a[ i] + a[i + 1])) {
- flag = false;
- break;
- }
- }
- if (flag) {
- res++;
- }
- } while (next_permutation(a.begin(), a.end()));
- cout << res << endl;
- return 0;
- }
复制代码
这样修改后的代码会正确计算满足条件的排列个数。 |
|