【哥德巴赫猜想】CF735D Taxes

版权声明:虽然本蒟蒻很菜,但各位dalao转载请注明出处谢谢。 https://blog.csdn.net/xuxiayang/article/details/88774454

D e s c r p t i o n Descrption

f ( x ) f(x) 表示 x x 的除 x x 以外的最大因子,现在给定一个数 n n ,将 n n 拆成若干个数 a i a_i ,使得 a i = n \sum a_i=n 的情况下,求 m i n { f ( a i ) } min\{\sum f(a_i)\}

n 2 × 1 0 9 n\leq 2\times 10^9


S o l u t i o n Solution

x x 是质数时,显然 f ( x ) f(x) 是最小的

所以我们尽量把 n n 拆成质数即可

根据哥德巴赫猜想:任何一个大于等于4的偶数均可表示成两个质数之和

所以说大于4的偶数答案即为2

如果是奇数呢?

把它当成偶数+1不就行了咯,答案就是3

但还是需要考虑一种特殊情况,因为。。。。2也是质数!

所以我们还要判断这个数能否表示成一个质数+2,如果可以那么它的答案也是2

剩下的?日常 O ( n 3 ) O(\frac{\sqrt n}3) 判断素数咯


C o d e Code

#include<cstdio>
using namespace std;int n;
inline bool pd(int n)
{
    if(n==1) return false;
    if(n==2||n==3) return true;
    if(n%6!=1&&n%6!=5) return false;
    for(register int i=5;i*i<=n;i+=6)
        if(n%i==0||n%(i+2)==0) return false;
    return true;
}
signed main()
{
	scanf("%d",&n);
	if(pd(n)) return putchar(49)&0;
	if(!(n&1)||pd(n-2)) return putchar(50)&0;
	return putchar(51)&0;
}

猜你喜欢

转载自blog.csdn.net/xuxiayang/article/details/88774454