Semi-Prime 秒速五厘米 2022-05-15 04:50 137阅读 0赞 ## Semi-Prime ## rime Number Definition An integer greater than one is called a prime number if its only positive divisors (factors) are one and itself. For instance, 2, 11, 67, 89 are prime numbers but 8, 20, 27 are not. Semi-Prime Number Definition An integer greater than one is called a semi-prime number if it can be decompounded to TWO prime numbers. For example, 6 is a semi-prime number but 12 is not. Your task is just to determinate whether a given number is a semi-prime number. 素数定义 如果一个大于1的整数只有一个正整数(因子)是一个整数,那么它就称为素数。 例如,2,11,67,89是素数,但8,20,27不是。 半素数定义 如果一个大于1的整数可以分解为两个素数,则称其为一个半素数。 例如,6是一个半素数,但12不是。 你的任务只是确定一个给定的数字是否是一个半素数。 Input There are several test cases in the input. Each case contains a single integer N (2 <= N <= 1,000,000) 输入中有几个测试用例。 每个案例包含一个整数N(2 <= N <= 1,000,000) Output One line with a single integer for each case. If the number is a semi-prime number, then output “Yes”, otherwise “No”. 一行每个案件都有一个整数。 如果数字是半素数,则输出“是”,否则输出“否”。 Sample Input 3 4 6 12 Sample Output No Yes Yes No 分析: 注意是素数因子!因子!而不是相加 比如6是半素数 是因为因子是3 而不是3+3=6 代码总览: //AC代码 #include <stdio.h> int nosushu(int n) { int i; for(i=2;i<n;i++) { if(n%i==0) break; } if(i>=n) return 0; else return 1; } int main() { int n,a[100000]; while(scanf("%d",&n)!=EOF) { int i,k=0,p=0; for(i=2;i<n;i++) if(n%i==0) a[k++]=i; for(i=0;i<k;i++) if(nosushu(a[i])) { p++; printf("No\n"); break; } if(p==0&&k!=0) printf("Yes\n"); else if(k==0) printf("No\n"); } return 0; }
还没有评论,来说两句吧...