【题目描述】:
对于一个数字对(a,b),我们可以通过一次操作将它变成新数字对(a+b,b)或者(a,b+a) 。给定一个正整数n,问最少需要多少次操作可将一个数字对(1,1)变为一个数字对,且该数字对至少有一个数是n?
【输入描述】:
一行一个正整数n 。
【输出描述】:
一行一个整数表示答案。
【样例输入】:
5
【样例输出】:
3
【样例说明】:
(1,1)到(1,2)到(3,2)到(5,3)
提示:初中学过
【时间限制、数据范围及描述】:
时间:1s 空间:256M
对于30%的数据,满足n<=1000。
对于60%的数据,满足n<=20000。
对于100%的数据,满足1<=n<=1000000。
【解题思路】:
最后一个数对一定会包含n,所以枚举另一个数即可。若两个数互质,则更新答案。
【AC代码】:
#include<bits/stdc++.h>
#define f(i,a,b) for(int i=a;i<=b;i++)
#define fd(i,a,b) for(int i=a;i>=b;i--)
#define M(a,b) memset(a,b,sizeof(a))
using namespace std;
int n,i,ans=0,maxn;
int gcd(int a,int b){
if(b==0)return a;
ans+=a/b;
return gcd(b,a%b);
}
int main(){
cin>>n;
maxn=214748367;
for(i=1;i<=n;i++){
ans=0;
if(gcd(n,i)==1)maxn=min(maxn,ans-1);
}
cout<<maxn<<endl;
return 0;
}