【算法1-3】暴力枚举 - 题单 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
思路:通过升序枚举,将所有情况考虑,再判断是不是素数
代码:
#include<iostream>
using namespace std;
bool isPrime(int a)
{
if (a == 1||a==0)
return 0;
for (int i = 2; i*i <= a; i++)
{
if (a % i == 0)
return 0;
}
return 1;//素数
}
int ans = 0;
int n, k;
int arr[20];
void dfs(int start, int sum, int m)//start升序起始点
{
if (m == k) {//结束
if (isPrime(sum) == 1)
ans++;
return;
}
for (int i = start; i < n; i++)
{
dfs(i + 1, sum + arr[i], m + 1);
}
return;
}
int main()
{
cin >> n >> k;
for (int i = 0; i < n; i++)
{
cin >> arr[i];
}
dfs(0, 0, 0);
cout << ans;
return 0;
}
总结:
升序枚举;
判断素数:从2开始到该数的平方根(如果可能优化到√n),逐个尝试这些数是否能被整除
bool isPrime(int a)
{
if (a == 1||a==0)
return 0;
for (int i = 2; i*i <= a; i++)
{
if (a % i == 0)
return 0;
}
return 1;//素数
}