题目大意:
一个人要交税,输入一个整数n,他需要交的税是n的最大公约数,若n是素数,那么 就交1,不过他想偷懒,分好几次交,求最少的税。
解题思路:
哥德巴赫猜想,分如下几步判断。
①n是素数——直接交1的税。
②n是除素数之外的偶数——哥德巴赫说过,任何两个偶数都可以拆成两个素数之和( 除了2),所以就可以交2的税。
③n是除素数之外的奇数——n-2是素数嘛?是的话就交2的税,不然的话n-3是偶数,偶数又可以拆成两个素数,这样就是交3的税。
代码如下:
#include<stdio.h>
int sushu(int x)
{
for(int i=2 ; i*i<=x ; i++)
if(0==x%i) return 0;
return 1;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
if(sushu(n)) printf("1");
else if(0==n%2) printf("2");
else if(sushu(n-2)) printf("2");
else printf("3");
}
}
PS:被一个小细节坑了好久。。。。用n%2来判断奇偶的时候,不要用!n%2进行相反的判断,因为优先级的原因,会计算成(!n)%2。谨记。。
题目传送门。。。。