zoukankan      html  css  js  c++  java
  • fzu1759:数论高次幂降幂

    题目大意:

    求 a^b mod c的值。。但是b会非常大(10^1000000)

    所以需要用到一个数论公式:

     A^x = A^(x % Phi(C) + Phi(C)) (mod C)

    证明见ac大神博客http://hi.baidu.com/aekdycoin/item/e493adc9a7c0870bad092fd9

    #include <iostream>
    #include <stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<string>
    #include<ctype.h>
    using namespace std;
    #define MAXN 10000
    long long a,b,c;
    char s[1000010];
    long long phi(long long n)
    {
        long long res=n;
        for(int i=2; i*i<=n; i++)
        {
            if(n%i==0)
            {
                res=res-res/i;
                while(n%i==0)
                    n/=i;
            }
        }
        if(n>1)
            res=res-res/n;
        return res;
    }
    long long quickmod(long long a,long long b,long long m)
    {
        long long res=1;
        while(b)
        {
            if(b&1)
            {
                res=res*a%m;
            }
            a=a*a%m;
            b/=2;
        }
        return res;
    }
    int main()
    {
        while(cin>>a)
        {
            scanf("%s%I64d",s,&c);
            long long p=phi(c);
            int len=strlen(s);
            b=0;
            if(len<=10)
            {
                for(int i=0;i<len;i++)
                {
                    b = b*10 + (s[i]-'0');
                }
                printf("%I64d
    ",quickmod(a,b<p?b:b%p+p,c));
                continue;
            }
            for(int i=0; i<len; i++)
            {
                b=(b*10+(s[i]-'0'))%p;
            }
            printf("%I64d
    ",quickmod(a,b+p,c));
        }
        return 0;
    }
  • 相关阅读:
    ORACLE(系统表emp) 基本与深入学习
    jQuery框架 的四个入口函数
    函数
    sql1999语法
    左连接,右连接
    Oracle单行函数用法
    Kettle
    order by 排序
    sql*plus
    sql基本语句
  • 原文地址:https://www.cnblogs.com/oneshot/p/4111468.html
Copyright © 2011-2022 走看看