首页 > 其他 > 详细

清华大学机试 求root(N,k) 需要二刷 *数学推导下的快速幂取模

时间:2020-03-12 01:27:54      阅读:102      评论:0      收藏:0      [点我收藏+]

刚开始用的字符串来做,爆时间了;

 

技术分享图片

 

采用如上推导,可以变成快速幂取模,这样一切就明了了;

还要注意,有的测试点算出了Nr=0,根据定律,只能得到N=k-1;

 

关键点:

无;

 

#include<iostream>
#include<string>
#include<vector>
using namespace std;

typedef long long ll;

int x, y, k;

ll charge(ll x, ll y, ll k) {
    ll res = 1;
    ll base = x;
    while (y != 0) {
        if (y % 2 == 1) {
            res = res * base;
            res %= k;
        }
        base *= base;
        base %= k;
        y /= 2;
    }
    return res;
}

int main() {
    while (cin >> x >> y >> k) {
        ll res = charge(x, y, k - 1);
        if (res == 0)
            cout << k - 1 << endl;
        else
            cout << res << endl;
    }
}

 

清华大学机试 求root(N,k) 需要二刷 *数学推导下的快速幂取模

原文:https://www.cnblogs.com/songlinxuan/p/12466565.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!