• 康纳的表情包(思维)


    UMR 现在手里有 n 张康纳的表情,最上面一张是玛吉呀巴库乃。现在 UMR 如果每次把最上面的 m 张牌移到最下面而不改变他们的顺序及朝向,那么至少经过多少次移动玛吉呀巴库乃才会又出现在最上面呢?

    3917

    Input

    多组输入。

    对于每组数据,输入以空格分隔的两个整数 n 和 m (1 <= n, m <= 10^9)。

    Output

    对于每组数据,输出一个整数,表示至少移动的次数。

    Sample Input

    54 12
    

    Sample Output

    9


    解题思路:当时这道题在组队赛中是我看的,碰巧之前有一个同学问过我一个约瑟夫环的问题我就把这道题当做了类似约瑟夫环的问题,用队列写了一发,时间超限,看了看数据量10^9,觉得这可能是一道找规律的题目,于是想了想,找到了这样一个规律。想让这一张纸牌再次出现在最上面我们需要移动的总的牌数一定是纸牌数的倍数,也一定是每次移动牌数的倍数,于是求两者的最小公倍数就一定是最少的移动总牌数,再用移动的总牌数除以每次移动的牌数,就可以得到最少的移动次数。

    这里需要用到一个公式:lcm(n,m)*gcd(n,m)=n*m

    所以 lcm(n,m) = (n*m)/gcd(n,m)
    counts = lcm(n,m)/m
    最后整理得到
    counts = n/gcd(n,m)

     1 #include<algorithm>
     2 #include<cstdio>
     3 using namespace std;
     4 int main()
     5 {
     6     int n,m;
     7     while(~scanf("%d%d",&n,&m))
     8         printf("%d
    ", m/__gcd(n,m));
     9     return 0;
    10 }
    
    
    
     
  • 相关阅读:
    把线程池比作装修公司
    字符串常量池
    如何理解多租户架构?
    Redis的List的删除
    MySQL Explain详解
    Lombok
    减少TIME_WAIT时间的优化配置
    MySQL Join算法与调优白皮书(一)
    MySQL Join算法与调优白皮书(二)
    MySQL Join算法与调优白皮书(三)
  • 原文地址:https://www.cnblogs.com/wkfvawl/p/9350662.html
Copyright © 2020-2023  润新知