已知正整数n是两个不同的质数的乘积,试求出两者中较大的那个质数。

已知正整数n是两个不同的质数的乘积,试求出两者中较大的那个质数。

该题已明确表明n为两个不同质数的乘积,故不用再去判断其因子是否为质数。
很明显,对于该题很多人的第一想法都是从2往n-1找因子。实际上,只需从2找到n的平方根处即可。

下面先介绍一下判断质数的办法

void isprime (int n)
{
     
    int m= (int)sqrt((double)n);  //找到其开方数,当n为很大数时,可节省时间
    for (int i=2; i<m; i++)      
    {
     
    	if (n%i!=0)            
	  {
     
	    cout<<"TRUE"<<endl;
	    break;
	  }
    	else
      {
     
		cout<<"ERROR"<<endl;
		break;
	  }
	}
}

以上是判断质数的方法。针对该题当然可以找因子并判断其是否为质数,再比较其大小,找出最大的质数。但该题由更简单的做法:
给出的数为两数之积,其中一个数x<=另一个数y,故可以找到其最小的质因子之后再求出最大的质因子。

{
     
    unsigned long long int n; cin>>n;
    int i,m,j; m=(int)sqrt((double)n);
    for (i=2; i<=m; i++)
    {
     
    	if (n%i==0)
    	{
     
    		cout<<n/i<<endl; break;
		}
	}
}

这里用unsigned long long int 是应为该题有限制条件:2

你可能感兴趣的:(已知正整数n是两个不同的质数的乘积,试求出两者中较大的那个质数。)