zoukankan      html  css  js  c++  java
  • FZU:1759-Problem 1759 Super A^B mod C (欧拉降幂)

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=1759

    欧拉降幂是用来干啥的?例如一个问题AB mod c,当B特别大的时候int或者longlong装不下的时候需要对B mod 一个数并且不改变最终的答案,这就可以将使用欧拉降幂公式来进行计算。

    公式:AB mod C  == AB%φ(C) + φ(C) mod C (其实φ(c)是c的欧拉函数值),这样就是欧拉函数的使用。

    #include <stdio.h>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    typedef long long ll;
    const int maxn = 1e6+100;
    
    char b[maxn];
    ll a, c;
    
    ll eular(ll n) {
        ll res = n;
        for (ll i = 2; i * i <= n; i++) {
            if (n % i == 0) {
                n /= i;
                res = res / i * (i - 1);
    
                while (n % i == 0) {
                    n /= i;
                }
            }
        }
        if (n > 1)
            res = res / n * (n - 1);
        return res;
    }
    
    ll quickpow(ll a, ll m, ll c) {
        ll ans = 1;
        while (m) {
            if (m & 1)
                ans = ans * a % c;
            a = a * a % c;
            m >>= 1;
        }
        return ans;
    }
    
    int main() {
        while (scanf("%lld%s%lld", &a, b, &c) != EOF) {
            ll p = eular(c);
            int len = strlen(b);
            ll m = 0;
            for (int i = 0; i < len; i++) {
                m = m * 10;
                m += b[i] - '0';
                m %= p;
            }
            m += p;
            printf("%lld
    ", quickpow(a, m, c));
        }
    }
  • 相关阅读:
    具有快表的地址变换机构
    npm更换淘宝镜像
    内存扩充技术
    内存管理的概念
    内存的基础知识
    102. 二叉树的层序遍历
    104. 二叉树的最大深度
    206. 反转链表
    mysql 多字段查询,全局搜素
    java 处理html转义字符
  • 原文地址:https://www.cnblogs.com/GoldenFingers/p/9424646.html
Copyright © 2011-2022 走看看