求助,只有第二个点过了
查看原帖
求助,只有第二个点过了
832972
xsy0219楼主2024/7/4 23:29
#include <iostream>
#include <stdio.h>
#include <math.h>
int n, k;
int a[25], book[25] = {0};
int number = 0;
int isprime(int p)
{
    if (p == 1 || p == 0)
        return 0;
    if (p == 2 || p == 3)
        return 1;
    for (int i = 2; i <= sqrt(p); i++)
    {
        if (p % i == 0)
            return 0;
    }
    return 1;
}
void dfs(int i, int step)
{
    if (step == k)
    {
        int ans = 0;
        for (int j = 1; j <= n; j++)
        {
            if (book[j] == 1)
                ans += a[j];
        }
        if (isprime(ans))
            number++;
    }
    for (int j = i + 1; j <= n; j++)
    {
        if (book[j] == 0)
        {
            book[j] = 1;
            dfs(j, step + 1);
            book[j] = 0;
        }
    }
    return;
}

using namespace std;
int main()
{
    cin >> n >> k;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
    }
    dfs(1, 0);
    cout << number;
    return 0;
}
2024/7/4 23:29
加载中...