【题目描述】
已知正整数n是两个不同的质数的乘积,试求出较大的那个质数。
【输入】
输入只有一行,包含一个正整数 n。
对于60%的数据,6≤n≤1000。
对于100%的数据,6≤n≤2×10^9。
【输出】
输出只有一行,包含一个正整数 p,即较大的那个质数。
【输入样例】
21
【输出样例】
7
题解代码:
题解一:
#include<bits/stdc++.h>
using namespace std;
int isprime(int n)//判断是否为质数
{
for(int i=2;<=sqrt(n);i++)//最小的质数为2,2到n-1 2到n/2 2到sqrt(n)等那个快
if(n%i==0) return 0;
return 1;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=2;i<n;i++)
if(n%i==0 && isprime(i))
{
printf("%d",n/i);
break;
}
return 0;
}
题解二:
由于题目明确指出正整数n是两个不同的质数的乘积,所以也可以不用进行质数判断,且输入的n的分解因数一定是两个质数的前提所以:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int i,j,n,temp;
scanf("%d",&n);
for(i=2;i<sqrt(n);i++)//以根式n,减少不必要的循环次数
{
if(n%i==0)
{
j=n/i;
}
}
if(i>j)//判断质数大小并赋值
{
temp=i;
}else{
temp=j;
}
printf("%d",temp);
return 0;
}