P3862数字对

来源:互联网 发布:淘宝二手怎么找不到了 编辑:程序博客网 时间:2024/06/16 17:00

问题描述

对于一个数字对(a,b),我们可以通过一次操作将其变为新数字对(a+b,b)或(a, a+b)。 给定一正整数
n,问最少需要多少次操作可将数字对(1,1)变为一个数字对, 该数字对至少有一个数字为 n。

输入格式

第一行一个正整数 n

输出格式

一个整数表示答案

样例输入

5

样例输出

3

题解

GCD依次求值

代码

#include<stdio.h>#include<algorithm>#include<cmath>#include<cstring>#include<queue>#include<iostream>#include<cstdio>using namespace std;int gcd(int x,int y){    if(y==1) return x-1;    if(x==0||y==0||x==y) return 1e9;    return gcd(y,x%y)+x/y;}int n,ans;int main(){    int i;    scanf("%d",&n);    ans=n-1;    for(i=2;i<n;i++) ans=min(gcd(n,i),ans);    cout<<ans;}