再战斐波那契-Fibonacci+gcd

再战斐波那契

单点时限: 1.0 sec

内存限制: 512 MB

小z 学会了斐波那契和 gcd 后,老师又给他出了个难题,求第N个和第M个斐波那契数的最大公约数,这可难倒了小z ,不过在小z 的再三请求下,老师又告诉他了个条件,gcd(N,M)∈[1,90]。
可是,笨拙的小z 还是不会,于是请求你帮他解答这个问题。

输入格式:

输入包括 T 组,T∈[1,10]. 
接下来 T 行,每行两个整数 N,M, 表示斐波那契的第 N 项和第 M 项,(N,M∈[1,1018]).

输出格式:

输出包含 T 行,每行输出一个整数.

样例:

input

3
1 2
2 3
3 4

output

1
1
1

思路:根据范围小的去找范围大的,先进行打表

有一个公式:gcd(fn,fm)=f(gcd(n,m))

 1 #include<iostream>
 2 #include<iomanip>
 3 #include<string.h>
 4 #include<set>
 5 #include<map>
 6 #include<stdio.h>
 7 #include<queue>
 8 #define inf 0x3f3f3f3f
 9 using namespace std;
10 typedef long long ll;
11
12 ll gcd(ll x,ll y)
13 {
14     if(y==0)
15         return x;
16     return gcd(y,x%y);
17 }
18
19 //ll f(ll x)//项数
20 //{
21 //    if(x==0)
22 //        return 0;
23 //    if(x==1)
24 //        return 1;
25 //    else
26 //        return f(x-1)+f(x-2);
27 //}
28 ll f[110];
29 void init()
30 {
31     f[0]=0;
32     f[1]=1;
33     for(int i=2;i<100;i++)
34         f[i]=f[i-1]+f[i-2];
35 }
36
37 int main()
38 {
39     std::ios::sync_with_stdio(false);
40     cin.tie(0);
41     cout.tie(0);
42     init();
43     int t;
44     long long n,m;
45     scanf("%d",&t);
46     while(t--)
47     {
48         scanf("%lld %lld",&n,&m);
49         cout<<f[gcd(n,m)]<<endl;
50     }
51     return 0;
52 }

原文地址:https://www.cnblogs.com/OFSHK/p/11258925.html

时间: 2024-10-04 13:37:57

再战斐波那契-Fibonacci+gcd的相关文章

编程之美 2.9 斐波那契(Fibonacci)数列

编程之美 2.9 斐波那契(Fibonacci)数列 斐波那契的递归表达式如下 F(n)=F(n-1)+F(n-2) n>=2 F(1)=1 F(0)=0 书中提到了三中解决方法 第一种:直接运用递归的方法来进行求解 package org.wrh.programbeautiful; import java.util.Scanner; public class Topic2_9 { public static void main(String[] args) { Topic2_9 t=new T

9.求斐波那契Fibonacci数列通项

(1)递归实现: #include<iostream>using namespace std;int Fibonacci(int); int main(){    int n;    cout<<"please input an number n: "<<endl;    cin>>n; for(int i=1;i<=n;i++)    {        cout<<Fibonacci(i)<<endl; 

【编程之美】斐波那契(Fibonacci)数列

斐波那契数列是一个非常美丽.和谐的数列,有人说它起源于一对繁殖力惊人.基因非常优秀的兔子,也有人说远古时期的鹦鹉就知道这个规律. 每一个学理工科的学生都知道斐波那契数列,斐波那契数列由如下递推关系式定义: F(0)=0, F(1)=1, n>1时,F(n)=F(n-1)+F(n-2). 每一个上过算法课的同学都能用递归的方法求解斐波那契数列的第n+1项的值,即F(n). 1 int Fibonacci(int n) 2 { 3 if (n <= 0) return 0; 4 else if (

斐波那契 [ Fibonacci] 数列之大整数求和

之前做到一题, 不过由于Honor Code的缘故就不说是啥了, 很多人都知道 (-_-) 大概是说有n个牌,每个牌只有A,B两种状态. 当出现连续3个牌的状态一样时,认为不完美. 给出一个[1, 10000]的整数, 让求出完美的排列个数 那么我们就可以分析一下: /*-------------------------------------------------------------------------------分析:    首先要求出不美观的个数,但是尝试可以发现美观的排列更容易

【C语言】求斐波那契(Fibonacci)数列通项(递归法、非递归法)

意大利的数学家列昂那多·斐波那契在1202年研究兔子产崽问题时发现了此数列.设一对大兔子每月生一对小兔子,每对新生兔在出生一个月后又下崽,假若兔子都不死亡.   问:一对兔子,一年能繁殖成多少对兔子?题中本质上有两类兔子:一类是能生殖的兔子,简称为大兔子:新生的兔子不能生殖,简称为小兔子:小兔子一个月就长成大兔子.求的是大兔子与小兔子的总和. 月     份  ⅠⅡ  Ⅲ  Ⅳ  Ⅴ Ⅵ  Ⅶ  Ⅷ Ⅸ Ⅹ  Ⅺ  Ⅻ大兔对数 1  1   2   3   5  8  13  21 34 55 

斐波那契 (Fibonacci)数列

尾递归会将本次方法的结果计算出来,直接传递给下个方法.效率很快. 一般的递归,在本次方法结果还没出来的时候,就调用了下次的递归, 而程序就要将部分的结果保存在内存中,直到后面的方法结束,再返回来计算.如果递归比较大,可能会照成内存溢出. 实践证明,尾递归 ,确实比普通递归效率高. 下面的例子 ,用 普通递归需要10s完成 , 而用尾递归,只用了1s不到 package com.zf.dg; /** * 题目 * 有一种母牛,出生后第三年,开始生育,每年都生一头 母牛(貌似单性生育,这里就没公牛什

如何用Python输出一个斐波那契Fibonacci数列

a,b = 0, 1 while b<100: print (b), a, b = b, a+b 原文地址:https://www.cnblogs.com/apollo1616/p/9776116.html

利用矩阵求斐波那契数列

利用矩阵求斐波那契数列 flyfish 2015-8-27 矩阵(matrix)定义 一个m*n的矩阵是一个由m行n列元素排成的矩形阵列.矩阵里的元素可以是数字符号或者数学式. 形如 {acbd} 的数表称为二阶矩阵,它由二行二列组成,其中a,b,c,d称为这个矩阵的元素. 形如 {x1x2} 的有序对称为列向量Column vector 设 A={acbd} X={x1x2} 则 Y={ax1+bx2cx1+dx2} 称为二阶矩阵A与平面向量X的乘积,记为AX=Y 斐波那契(Fibonacci

13.斐波那契数

斐波那契数 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 小X是个聪明的孩子,他记得斐波那契数列f(n)中前1000个数.不过由于学业的压力,他无法记得每一个数在数列中的位置. 他现在知道斐波那契数列中的一个数f(x)模P后的值N(即f(x) mod P=N)以及x可能的最大值M,如果再对于斐波那契数列中每一个数都模P,他想知道这个数可能出现在第几个.不过小X还要做作业呢,这个问题就交给你由编程来解决了.