信息学奥赛一本通:1098:质因数分解

发布时间:2024年01月15日

【题目描述】

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

【输入】

输入只有一行,包含一个正整数?n。

对于60%的数据,6≤n≤1000。

对于100%的数据,6≤n≤2×109。

【输出】

输出只有一行,包含一个正整数?p,即较大的那个质数。

【输入样例】

21

【输出样例】

7

【参考一】超时

#include <bits/stdc++.h>
using namespace std;
int main ()
{
	int n,flag1,flag2,t=0,out=0;
	cin>>n;
	for(int i=2;i<=n;i++)
	{
		flag1=false;
		for(int j=2;j<i;j++)
		{
			if(i%j==0)
			{
				flag1=true;
				break;	
			}
		}
		if(!flag1)
		{
			t=n/i;
			if(n==t*i)
			{
				flag2=false;
				for(int k=2;k<t;k++)
				{
					if(t%k==0)
					{
						flag2=true;
						break;	
					}
				}
				if(!flag2)
				{
					cout<<t;
					break;
				}
			}
		}
			
	}
		
  return 0;
}

【参考二】正常判断两个质数

#include <bits/stdc++.h>
using namespace std;
int main ()
{
	int n,x,y,t=0,out=0;
	cin>>n;
	for(int i=2;i<=n;i++)
	{
		x=2;
		while(x<=floor(sqrt(i))&&(i%x!=0))
		{
			x++;
		}
		if(x>floor(sqrt(i)))
		{
			t=n/i;
			if(n==i*t)
			{
				y=2;
				while(y<=floor(sqrt(t))&&(t%y!=0))
				{
					y++;
				}
				if(y>floor(sqrt(t)))
				{
					cout<<t<<endl;
					break;
				}
			}
		}	
	}
		
  return 0;
}

【参考三】两个质数的乘积是唯一的不能被其他两个数整除

#include <bits/stdc++.h>
using namespace std;
int main ()
{
	int n,x,y,t=0,out=0;
	cin>>n;
	for(int i=2;i<=n;i++)
	{
		if(n%i==0)
		{
			cout<<n/i;
			break;
			}	
	}
		
  return 0;
}

【解释(ChatGPT)】

 

文章来源:https://blog.csdn.net/u014117969/article/details/135415325
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。