zoukankan      html  css  js  c++  java
  • G-华华对月月的忠诚

    链接:https://ac.nowcoder.com/acm/contest/392/G

    题意:

    月月要参加学校的信息学集训,晚上不能陪华华聊天了。不过为了防止华华去和别的小姐姐聊天,浪费时间影响学习,所以月月给华华布置了一项任务。月月给了华华一个类似斐波那契数列的东西,这个数列满足:
    F1=A,F2=B,Fi=Fi1+Fi2(i>2)F1=A,F2=B,Fi=Fi−1+Fi−2(i>2)
    月月希望华华求出gcd(FN,FN+1)gcd(FN,FN+1)。月月认为,求这个东西需要很长的时间,所以华华就没有机会去和其他小姐姐聊天了。华华自然对月月十分忠诚,选择求出F的每一位后计算答案。但是比赛中的你看到这一题,就没必要那么老实了。现在给定A、B、N,请你求出月月要求的那个数字。答案可能很大,但是不取模。

    思路:

    gcd(a, b) = gcd(a, b - a)

    gcd(Fn, F(n+1)) =gcd(Fn, F(n + 1) - Fn)

    Fn = F(n - 1) + F(n - 2) => F(n + 1) = Fn + F(n - 1)

    F(n + 1) - Fn = F(n -1)

    gcd(Fn, F(n + 1) = gcd(F(n - 1), Fn)

    推出,gcd(Fn, F(n + 1) = gcd(A, B)

    代码:

    #include <bits/stdc++.h>
    
    using namespace std;
    
    typedef long long LL;
    
    int Gcd(int a, int b)
    {
        if (b == 0)
            return a;
        return Gcd(b, a % b);
    }
    
    int main()
    {
        int a, b;
        int t = 100;
        while (t--)
        {
            a = rand() % 10000;
            b = rand() % 10000;
            cout << Gcd(a, b) << ' ';
            cout << __gcd(a, b) << endl;
        }
    
        return 0;
    }
    

      

  • 相关阅读:
    has a / is a 的区别
    Linux头文件作用
    转一篇Decorator模式的讲解文章
    歌手推荐kate st. john
    拷贝构造函数和赋值构造函数声明为私有的作用
    重新认识C++中new的用法
    系统程序员成长计划容器与算法(二)(下)
    深入C++的new
    歌手推荐Cara Dillon
    浅析一道C++设计面试题
  • 原文地址:https://www.cnblogs.com/YDDDD/p/10504819.html
Copyright © 2011-2022 走看看