例题:4421: 交税
4421: 交税
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 246 Solved: 55
Description
阿强愉快的拿到了自己工资,可是抠门的他发现自己还要没有交税。X国采用一种奇怪的税收方式。对于工资
num,需要收的税是p,p为num的最大的除数并且p不等于num。
(ps:6的最大除数是3,25的最大除数是5,2的最大除数是1)
为了减少人们要交的税,X国又规定可以把钱分开算税,分开的个数不限,即n1 + n2 + ... + nk = n,要交的
税就是每个部分的总和。
阿强现在向你寻求帮助,给定X最少要交多少钱的税?
Input
数据的组数 T;(T<=2000)
接下来T行,每行一个数字X(2 <= X <= 2e9)
Output
对于每行X,输出最少的税Y
Sample Input
3
11
27
8
Sample Output
1
3
2
HINT
对于第三个例子8,可以分为3+5,3和5的最大除数都是1,所以答案是2
1 int isp(int n)///素数判断方法 2 { 3 for(int i=2;i*i<=n;i++) 4 { 5 if(n%i==0) return 0; 6 } 7 return 1; 8 } 9 10 int main() { 11 int t; 12 cin>>t; 13 while(t--) 14 {///哥德巴赫猜想:偶数变两个素数 15 ///奇数变1或2或3个素数 16 int n; 17 cin>>n; 18 if(n==2) 19 { 20 cout<<1<<endl; 21 } 22 else if(n%2==0) 23 { 24 cout<<2<<endl; 25 } 26 else 27 { 28 if(isp(n)) cout<<1<<endl; 29 else if(isp(n-2)) cout<<2<<endl; 30 else cout<<3<<endl; 31 } 32 } 33 return 0; 34 }