专栏文章

[P13016]最大因数-题解

P13016题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miox2k3u
此快照首次捕获于
2025/12/03 02:33
3 个月前
此快照最后确认于
2025/12/03 02:33
3 个月前
查看原文

Part0-前言(可略过)

这道题我在GESP赛场上打了好久才过,but总分100

Part1-思路

我来提供一种数论的方法 (我作为一个13岁初中生自然没学过LCA)
0.不妨设小的数为aa,大的数为bb,计数器为mm
1.将这两个数排序(并更新aabb编号),其中大的那个找一下它的父亲(因为它的父亲的数肯定比他小),并将数更新为它的父亲,将mm加1;
2.它的父亲的找法:设ii,从2开始遍历直到b\sqrt{b},如果bb能被ii整除的话,它的父亲就是b/ib/i
3.输出mm。(别忘了有多组样例)

Part2-举个例子

例如,4和16:
第一步,4<16,将16更新为8,mm=1;
第二步,4<8,将8更新为4,mm=2;
第三步,4=4,直接输出mm,即2。

Part3-代码实现

AC{\color{22dd22} AC } code(C++):
CPP
#include<bits/stdc++.h>
using namespace std;
long long e(int x) //求父亲
{
	for(int i=2;i*i<=x;i++)
	{
		if(x%i==0)
		{
			return x/i;
		}
	}
	return 1;
}
int main()
{
	int n;
	cin>>n;
	while(n--)
	{
		int a,b,m=0;
		cin>>a>>b;
		while(a!=b)
		{
			if(a>b)
			{
				swap(a,b);
			}
			b=e(b);
			m++;
		}
		cout<<m<<endl;
	}
	return 0;
}

Part4-完结撒花!

评论

0 条评论,欢迎与作者交流。

正在加载评论...