题目描述 Description
我们下面来研究整数性质,我们知道质数只有 1和自身两个因子,合数至少
有除了 1和自身的其他因子,我们也知道“猫老大数”是只能分解成两个质数乘
积形式的数,那么能分解成两个合数的数呢?我们称之为“牛数”。下面编程判
断整数是否为“牛数”。
输入输出格式 Input/output
输入格式:
第一行为 t(1<=t<=100),表示测试数据组数。
接下来 t行,每行一个正整数x(1<=x<=10^9)
输出格式:
对于每个输入数据 x,判断它是否为“牛数”,并输出一行字符串:如果它
是“牛数”,输出“cow”,否则输出“no”。
输入输出样例 Sample input/output
样例测试点#1
输入样例:
2
15
36
输出样例:
no
cow
思路:先把这个数分解为两个因数,传入判断质数函数判断即可,注意:要两个因数都为合数且这个数每次都不能被大于3的数整除
代码如下:
1 #include <stdio.h> 2 #include <math.h> 3 int prime(int k); 4 int main() 5 { 6 int n,cow,i,flag,j; 7 //freopen("cow.in","r",stdin); 8 //freopen("cow.out","w",stdout); 9 scanf("%d",&n); 10 for(j=0;j<n;j++) 11 { 12 flag=0; 13 scanf("%d",&cow); 14 for(i=4;i<=(sqrt(cow));i++) 15 { 16 if(cow%i==0&&prime(i)==0&&prime(cow/i)==0)//如果是,输出yes 17 { 18 printf("cow\n"); 19 flag=1; 20 break; 21 } 22 } 23 if(flag==0) printf("no\n");//不是牛数,输出no 24 } 25 return 0; 26 } 27 int prime(int x) //是合数返回0,不是返回1 28 { 29 int i,l; 30 l=sqrt(x); 31 for(i=2;i<=l;i++) 32 if(x%i==0) return 0; 33 return 1; 34 }
时间: 2024-11-29 11:01:49