AcWing 4622. 整数拆分

4622. 整数拆分 - AcWing题库

 

【数论】分情况讨论:

(1)如果x是质数,那么x的因数只有1和x自己,答案必然是1。

(2)如果x是偶数,根据哥德巴赫猜想,大于2的偶数都能拆分成两个素数的和,例如4可以拆分为2和2,6可以拆分为3和3,8可以拆分为3和5,所以答案是两个质数答案的和,必然是2。

(3)接下来就是奇合数了,从9开始的,我们可以先将它拆分成两个数,并且尽量让这两个数也是质数,因为他是奇数,所以拆分的结果必然一个是奇数一个是偶数,既是偶数又是质数的只有2,所以我们只需要验证另一个数是不是质数就行,如果是质数,那么答案和(2)相同,都是2。否则的话,这个数可以拆分成3和一个偶数,偶数的答案为2,再加上一个质数3,最终为3。

#include<iostream>
#include<math.h>
using namespace std;

bool isPrime(int x) {
    for (int i = 2; i <= sqrt(x); i++) {
        if (x % i == 0) return false;
    }
    return true;
}

int main() {
    int n;
    cin>>n;
    if (n == 2) cout<<1<<endl;
    else if (n % 2 == 0) cout<<2<<endl;
    else {
        if (n == 9) cout<<2<<endl;
        else if (isPrime(n)) cout<<1<<endl;
        else {
            n -= 2;
            if (isPrime(n)) cout<<2<<endl;
            else cout<<3<<endl;
        }
    }
}
#include<bits/stdc++.h>
using namespace std;

bool prime(int x) {
    for (int i = 2; i <= sqrt(x); i++) {
        if (x % i == 0) return false;
    }
    return true;
}

int main() {
    int n;
    cin >> n;
    if (prime(n)) puts("1");
    else if (n % 2 == 0 || prime(n - 2)) puts("2");
    else puts("3");
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值