codeforces 735D Taxes 哥德巴赫猜想
2016-11-28 12:14
148 查看
点击打开链接
n不是素数时 &&拆分时不是素数
n是偶数&&n>2 则答案(n的最大因子)>=2
n是奇数,答案(最大因子)>=3
若拆分成素数
哥德巴赫猜想 :大于2的偶数能拆分成两个质数之和 所以答案最小能取到2
n为奇数时,n-3为偶数(n-3能拆成两个素数之和,3为素数) 所以奇数的答案<=3
奇数能否为两个素数之和? 因为n为奇数所以拆分的两个素数k,n-k一个为奇数一个为偶数 若k为偶数&&k为素数 k=2 判断n-2是否为素数即可
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
typedef long long ll;
using namespace std;
bool check(ll x)
{
for(int i=2;i*i<=x;i++)
{
if(x%i==0)
return false;
}
return true;
}
int main()
{
ll n;
cin>>n;
if(n==2||check(n))//n是素数则答案为1
puts("1");
else if(n%2==0)
puts("2");
else
{
if(check(n-2))
puts("2");
else
puts("3");
}
return 0;
}
n不是素数时 &&拆分时不是素数
n是偶数&&n>2 则答案(n的最大因子)>=2
n是奇数,答案(最大因子)>=3
若拆分成素数
哥德巴赫猜想 :大于2的偶数能拆分成两个质数之和 所以答案最小能取到2
n为奇数时,n-3为偶数(n-3能拆成两个素数之和,3为素数) 所以奇数的答案<=3
奇数能否为两个素数之和? 因为n为奇数所以拆分的两个素数k,n-k一个为奇数一个为偶数 若k为偶数&&k为素数 k=2 判断n-2是否为素数即可
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
typedef long long ll;
using namespace std;
bool check(ll x)
{
for(int i=2;i*i<=x;i++)
{
if(x%i==0)
return false;
}
return true;
}
int main()
{
ll n;
cin>>n;
if(n==2||check(n))//n是素数则答案为1
puts("1");
else if(n%2==0)
puts("2");
else
{
if(check(n-2))
puts("2");
else
puts("3");
}
return 0;
}
相关文章推荐
- CodeForces - 735D Taxes 数论 哥德巴赫猜想和弱哥德巴赫猜想
- codeforces 735D Taxes 哥德巴赫猜想
- Codeforces 735 D Taxes (哥德巴赫猜想)
- CodeForces - 735D Taxes(数学)
- CodeForces 735D Taxes
- codeforces 735D Taxes(数论)
- Codeforces 735D Taxes
- codeforces 735 D. Taxes (三素数||哥德巴赫猜想)
- CodeForces - 735D Taxes
- codeforces 735d Taxes
- Codeforces 735D Taxes
- CodeForces 735D Taxes
- CodeForces 149D 括号染色问题 dp+dfs好题
- codeforces 558EA Simple Task
- CodeForces - 645C Enduring Exodus (二分)
- Codeforces 722C Destroying Array【逆序(离线)思维+并查集】
- CodeForces - 760B补题
- CodeForces - 859B Lazy Security Guard(思维)
- CodeForces 374A. Divisible by Seven
- 【树结构】CodeForces 396C