【发布时间】:2021-10-10 09:28:16
【问题描述】:
给定一个数n和整数k,检查k个质数之和是否等于n。
input 13 2
output: yes
explanation: 11+2 equals 13
由于 k 被假定为任何一般整数,我不知道如何解决它。我想通过创建所有素数的集合并寻找 k 数来解决它,但即使 k 小到 5,我们也必须运行 4 到 5 个循环来完成它。如何解决此类问题,请寻求帮助,谢谢。 我尝试了初始代码:
#include<iostream>
#include<unordered_set>
#include<vector>
using namespace std;
bool is_prime(int n){
bool flag =true;
for(int i=2;i<n;i++){
if(n%i==0 && n!=i){
flag=false;
break;
}
}
if(flag){
return true;
}
return false;
}
int main(){
int n;cin>>n;
int k;cin>>k;
unordered_set<int>s;
for(int i=2;i<n;i++){
if(is_prime(i)){
s.insert(i);
}
}
}
【问题讨论】:
-
n和k的范围是什么? -
@jarod42 没有提到,一般考虑整数范围
-
如此蛮力,甚至
O(N+K)似乎都不在考虑范围之内。必须找到一个数学公式。
标签: c++ algorithm dynamic-programming primes