专栏文章
[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.不妨设小的数为,大的数为,计数器为;
1.将这两个数排序(并更新,编号),其中大的那个找一下它的父亲(因为它的父亲的数肯定比他小),并将数更新为它的父亲,将加1;
2.它的父亲的找法:设,从2开始遍历直到,如果能被整除的话,它的父亲就是;
3.输出。(别忘了有多组样例)
0.不妨设小的数为,大的数为,计数器为;
1.将这两个数排序(并更新,编号),其中大的那个找一下它的父亲(因为它的父亲的数肯定比他小),并将数更新为它的父亲,将加1;
2.它的父亲的找法:设,从2开始遍历直到,如果能被整除的话,它的父亲就是;
3.输出。(别忘了有多组样例)
Part2-举个例子
例如,4和16:
第一步,4<16,将16更新为8,=1;
第二步,4<8,将8更新为4,=2;
第三步,4=4,直接输出,即2。
第一步,4<16,将16更新为8,=1;
第二步,4<8,将8更新为4,=2;
第三步,4=4,直接输出,即2。
Part3-代码实现
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 条评论,欢迎与作者交流。
正在加载评论...