0
点赞
收藏
分享

微信扫一扫

P1075 [NOIP2012 普及组] 质因数分解(多种算法)

霸姨 2022-02-19 阅读 51
算法c++

题目描述

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

输入格式

一个正整数nn。

输出格式

一个正整数pp,即较大的那个质数。

输入输出样例

输入 #1复制

21

输出 #1复制

7

标答

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	int n;
	cin >> n;
	int i, j, k,h,flag=1;
	for (k=2; k <=sqrt(n); k++)
	{
			if (n %k==0)
			{
				for (h = 3; h <= sqrt(k); h += 2)
				{

					if (k % h == 0)
					{
						flag = 0;
						break;
					}
				}
				if (flag)
				{
					cout << n/k;
					return 0;
				}
			}
			flag = 1;
	}
	return 0;
}

其他方法(会超时)

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	int n;
	cin >> n;
	int num[100000];
	int i, j = 1;
	num[0] = 2;
	for (i = 3; i < n; i+=2)
	{
		int flag = 1;
		for (int k = 3; k <= sqrt(i); k+=2)
		{
			
			if (i % k == 0)
				flag = 0;
		}
		if (flag)
		{
			num[j] = i;
			j++;
		}
		flag = 1;
	}
	for (i = j; i >= 0; i--)
	{
		for (int k = 0; k <= i; k++)
		{
			if (n == num[i] * num[k])
			{
				cout << num[i];
				return 0;
			}
			else if (n < num[i] * num[k])
				break;
		}
	}
	return 0;
}
举报

相关推荐

0 条评论