题意:
给定一个奇数n,要求将n分解为k个质数的和,要求1<=k<=3,输出方案。
数据范围:3<=p<=1e9
解法:
k
=1时显然需要n为质数
,
k
=2时
,因为n是奇数
,那么一定是
2和n
-2,判断n
-2是否是质数
k
=3时候
,取出一个
3,那么n
-3是偶数
,
根据哥德巴赫猜想
,n
-3一定能够拆分为两个质数
.
然后暴力找一下就行
,查找次数不会证明
.
code:
#include<bits/stdc++.h>
using namespace std
;
#define int long long
bool isprime(int x
){
for(int i
=2;i
*i
<=x
;i
++)if(x
%i
==0)return 0;
return 1;
}
signed main(){
int n
;cin
>>n
;
if(isprime(n
)){
cout
<<1<<endl
<<n
<<endl
;
}else if(isprime(n
-2)){
cout
<<2<<endl
<<2<<' '<<n
-2<<endl
;
}else{
for(int i
=2;i
<=n
-3;i
++){
if(isprime(i
)&&isprime(n
-3-i
)){
cout
<<3<<endl
<<3<<' '<<i
<<' '<<n
-3-i
<<endl
;
return 0;
}
}
}
return 0;
}
转载请注明原文地址:https://tech.qufami.com/read-7865.html