题目:
已知正整数 n 是两个不同的质数的乘积,试求出较大的那个质数。
分析:
本题有三个小点需要注意:
1.找出因子。
2.判断因子是否为质数。
3.比较因子大小。
故,采用模块化思想,分开实现,即采用函数单独判断。
代码:
#include<stdio.h>
//判断是否为质数,是则返回1,否则返回0
int is_prime(int x){
if(x<2) return 0; //小于2的数不是质数
for(int i=2;i*i<x;i++)
if(x%i == 0) //能被整除的数不是质数
return 0;
return 1;
}
//找较大的质因子,能找到则返回较大的质数,找不到则返回-1
int find_larger_prime(int n){
for(int i=2;i*i<=n;i++){
if(n%i==0){
int p=i;
int q=n/p;
if(is_prime(q))
return p>q?p:q;
}
}
return -1;
}
int main(){
int n;
scanf("%d",&n);
int larger_prime = find_larger_prime(n);
if (larger_prime != -1) {
printf("%d\n", larger_prime);
} else {
printf("not fond\n");
}
getchar();
getchar();
return 0;
}
测试:
样例输入
21
样例输出
7