输入一行,为两个正整数 P 和 Q 。
题目描述
输入格式
输出格式
输出一行一个整数,即最少要用的电阻个数。
样例数据 1
备注
【样例说明】
要得到一个 (3/2)Ω 的电阻,可以用两个电阻并联,再串联一个电阻。
【数据范围】
30% 的数据:1≤P,Q≤10;
100% 的数据:1≤P,Q≤1018。
分析:因为每个电阻是1欧
串联 p/q >> (p+q)/q;
并联 p/q >> p/(p+q);
因此此题可以倒着思考 读入q p
q>p q-np
q<p p-nq
q==p 得解
辗转相除
代码
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
long long p,q;
long long read()
{
long long k=0,f=1;
char c=getchar();
while(c>'9'||c<'0') {if(c=='-') f=-1; c=getchar();}
while(c>='0'&&c<='9') {k=k*10+(c-'0'); c=getchar();}
return k*f;
}
int main()
{
//、、freopen("resistance.in","r",stdin);
//freopen("resistance.out","w",stdout);
long long i,j,k;
p=read();
q=read();
if(p==q) {cout<<"1";return 0;}
long long ans=0;
while(true)
{
if(p>q)
{
ans+=p/q;
p=p%q;
if(p==0) break;
}
else
{
ans+=q/p;
q=q%p;
if(q==0) break;
}
}
cout<<ans;
return 0;
}