描述:
正整数n是两个不同质数的乘积,求较大的那个质数。
输入:
每组输入数据只有一行,包含一个正整数n。
数据规模:
对于60%的数据,6≤n≤1000。
对于100%的数据,6≤n≤2*109。
输出:
每组输出只有一行,包含一个正整数p,即较大的那个质数。
样例输入:
21
样例输出:
7
实现代码:
#include <stdio.h>
#include <math.h>
#define YES 1
#define NO 0
int isPrimeNumber(int num);
int main()
{
int n;
/*
测试数据
#21
#6
#1999410011
#1994590027
#998
#161
#995
#119
#1999520027
#559
#1999999874
*/
while(scanf("%d", &n) != EOF){
for(int i = 2; i < (sqrt(n)); i++){
if(n % i == 0 && isPrimeNumber(i) && isPrimeNumber(n/i)){
printf("%d\n", n/i);
break;
}
}
}
return 0;
}
int isPrimeNumber(int num)
{
if(num == 2 || num == 3)
return YES;
/*不在6的倍数2侧的一定不是素数*/
if(num % 6 != 1 && num % 6 != 5)
return NO;
int tmp = sqrt(num);
for(int i = 5; i <= tmp; i += 6)
if(num %i ==0 || num % (i + 2) == 0)
return NO;
return YES;
}
测试结果: