【NOIP2018模拟赛2018.10.3】capacitor
题目分析:
对于一个当前值now,有两种可能的去向:
- now + 1
- now / (now+1)
以为第一种很简单直接加一就行了就考虑第二种。
对于 n/m = n/(m-n) / n / (m-n) + 1
所以直接可以上下每次讲大数模小数的值加起来就行了。
#include<bits/stdc++.h>
using namespace std;
int t;
long long a,b;
int main() {
// freopen("capacitor.in","r",stdin);
// freopen("capacitor.out","w",stdout);
cin>>t;
while(t--) {
cin>>a>>b;
if(a==b) cout<<1<<endl;
else {
long long now = 1;
while(1) {
if(a%b==0) {
a=a/b;
b=1;
} else if(b%a==0) {
b=b/a;
a=1;
}
if(a==1) {
now += (b-2)+1;
break;
}
if(b==1) {
now += (a-2)+1;
break;
}
if(a>b) {
now += a/b;
a = a%b;
} else if(a<b) {
now += b/a;
b = b%a;
}
if(a==b-1) {
now += a;
break;
}
}
cout<<now<<endl;
}
}
return 0;
}