zoukankan      html  css  js  c++  java
  • 转圈游戏(简单的快速幂)

    题目:

    n 个小伙伴(编号从 0 到 n-1 )围坐一圈玩游戏。按照顺时针方向给 n 个位置编号,从 0 到 n-1 。最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置,……,依此类推。游戏规则如下:每一轮第 0 号位置上的小伙伴顺时针走到第 m 号位置,第 1 号位置小伙伴走到第 m+1 号位置,……,依此类推,第n − m号位置上的小伙伴走到第 0 号位置,第 n ~ m+1 号位置上的小伙伴走到第 1 号位置,……,第 n-1 号位置上的小伙伴顺时针走到第 m-1 号位置。

    思路:

    当走的次数是n和m的最小公倍数的时候,就会返回到最初的状态。

    1. 设n和m的最小公倍数为tmp

    2. 对10k运用快速幂求解,求解的过程中对tmp取余结果为ans

    3. 结果就是m乘以ans对n取余加上x

    代码:

    #include <bits/stdc++.h>
    #include <cmath>
    #define inf 0x3f3f3f3f
    #define FRE() freopen("in.txt", "r", stdin)
    #define FRO() freopen("out.txt", "w", stdout)
    
    using namespace std;
    typedef long long ll;
    
    ll MyMul(ll k, ll x, ll mod)
    {
        ll res = 1;
        x = x % mod;
        while(k)
        {
            if(k & 1)
                res = (res*x)%mod;
            k >>= 1;
            x = (x*x)%mod;
        }
        return res % mod;
    }
    
    int main()
    {
        ll n,m,k,x;
        cin>>n>>m>>k>>x;
        ll tmp = (n*m)/__gcd(n,m);
        cout<<(MyMul(k,10,tmp)*m+x)%n<<endl;
        return 0;
    }
  • 相关阅读:
    二分查找
    「数学」二次函数中项系数大小与图像的关系
    「数学」夹角公式
    「CF80A」Panoramix's Prediction
    「Luogu P6101」[EER2]出言不逊
    「数学」三角函数公式以及部分证明
    「Luogu P6069」[MdOI2020] Group
    「CF80B」Depression
    「数学」Menelaus定理与Ceva定理
    「AT1175」ニコニコ文字列
  • 原文地址:https://www.cnblogs.com/sykline/p/11420291.html
Copyright © 2011-2022 走看看