题目
对于一个数字对(a, b),我们可以通过一次操作将其变为新数字对(a+b, b)或(a, a+b)。
给定一正整数n,问最少需要多少次操作可将数字对(1, 1)变为一个数字对,该数字对至少有一个数字为n。
分析
用GCD,对于给定的n,进行枚举
程序
#include<iostream>
using namespace std;
int gcd(int x,int y)
{
if(y==1) return x-1;
if(x==0) return 100000000;
if(y==0) return 100000000;
if(x==y) return 100000000;
return gcd(y,x%y)+x/y;
}
int main()
{
int n,ans;
cin>>n;
ans=n-1;
for(int i=2;i<n;i++)
ans=min(gcd(n,i),ans);
cout<<ans<<endl;
}