题目描述
Description
已知正整数 n是两个不同的质数的乘积,试求出较大的那个质数 。
输入描述 Input Description
输入只有一行,包含一个正整数 n。
输出描述 Output Description
输出只有一行,包含一个正整数p,即较大的那个质数。
样例输入 Sample Input
21
样例输出 Sample Output
7
数据范围及提示 Data Size & Hint
【数据范围】
对于60%的数据,6≤n≤1000。
对于100%的数据,6≤n≤2*109。
#include<cstdlib>
#include<cstdio>
#include<cmath>
int a[100];//存放质因数
int j=0;
int fjzys(int k)
{
//int i=2;
int m=(int)sqrt(k+0.5);//优化,使得时间复杂度从O(n)变为O(sqrt(n)),sqrt(x)返回的是一个double型数据,要轻质转化为int型
/*while(i<=m)
{
if(k%i==0)//判断k是否整除当前因数
{
a[j]=i;//存入因数
k/=i;//余数
//i++;因数加一,是因数非质因数
j++;//计数值
}
else
i++;//不能整除则当前因数为非质因数
}*/两种方法均可
for(int i=2;i<=m;i++)
{
if(k%i==0)
{
a[j]=i;
k/=i;
}
}
if(k>1)
a[j++]=k;
return 0;
}
int main()
{
int n;
scanf("%d",&n);
if(n>=6)
fjzys(n);
/*for(int i=0;i<j-1;i++)
{
printf("%d",a[i]);
printf("*");
}*///输出该整数的所有因数乘积而非质因数
printf("%d",a[j-1]);
return 0;
}
超出时间限制:一般是时间复杂度过大