2020牛客寒假算法基础集训营4 A 欧几里得

https://ac.nowcoder.com/acm/contest/3005/A
如果已知 gcd(a,b) 共递归了 n次,求所有可能的a,b中满足a>b>=0且a+b最小的一组的a与b之和。

 思路

gcd(a,b)=gcd(b,a\%b)可知gcd(a + b, a) = gcd(a,(a+b)\%b)=gcd(a,b),也就是说没多一次递归,a=a+b,b=a,这不就一斐波那契数列吗,直接写就行了

#include <bits/stdc++.h>
#define mem(a, b) memset(a, b, sizeof a)
#pragma warning (disable:4996)
#pragma warning (disable:6031)
using namespace std;
typedef long long ll;
ll f[100];
int main()
{
	int t;
	scanf("%d", &t);
	int n;
	f[0] = 1;
	f[1] = 3;
	f[2] = 5;
	for (int i = 3; i <= 80; i++) {
		f[i] = f[i - 1] + f[i - 2];
	}
	while (t--) {
		scanf("%d", &n);
		printf("%lld\n", f[n]);
	}
	return 0;
}
发布了165 篇原创文章 · 获赞 11 · 访问量 9623

猜你喜欢

转载自blog.csdn.net/weixin_43701790/article/details/104267700
今日推荐