Codeforces584 D. Dima and Lisa(哥德巴赫猜想)

tech2022-12-08  111

题意:

给定一个奇数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; }
最新回复(0)