• 2017ICPCECIC C.A math problem(高次剩余)


    题目链接:https://oj.neu.edu.cn/contest/70/problem/3

    分析:

       这题略坑。。O(nlogn)过不了,实际上t(1)=(p-1)/gcd(k,p-1),O(logp)可以得到t(1)。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<vector>
     5 using namespace std;
     6 vector<int> vec;
     7 const int maxn=1e5+5,MOD=1e9+7;
     8 typedef unsigned long long ll;
     9 int k,p,n;
    10 bool have[maxn];
    11 int pri[maxn],len=0;
    12 void CalPri(){
    13     int maxn=100;
    14     bool Is_pri[maxn];
    15     memset(Is_pri,-1,sizeof(Is_pri));
    16     for(int i=2;i<maxn;i++){
    17         if(Is_pri[i])
    18             pri[len++]=i;
    19         for(int j=0;j<len&&pri[j]*i<maxn;j++){
    20             Is_pri[i*pri[j]]=false;
    21             if(i%pri[j]==0)
    22                 break;
    23         }
    24     }
    25 }
    26 ll qpow(int a,int n,int mod){
    27     ll res=1,y=a,k=1;
    28     while(k<=n){
    29         if(k&n){
    30             res=(res*y)%mod;
    31         }
    32         y=(y*y)%mod;
    33         k<<=1;
    34     }
    35     return res;
    36 }
    37 int gcd(int a,int b){
    38     if(a==0)return b;
    39     else return gcd(b%a,a);
    40 }
    41 int main(){
    42     //freopen("e:\in.txt","r",stdin);
    43     while(scanf("%d%d%d",&k,&p,&n)!=EOF){
    44         if(k==0){
    45             printf("1
    ");
    46             continue;
    47         }
    48         int GCD=gcd(k,p-1);
    49         ll ans;
    50         memset(have,0,sizeof(have));
    51         int c=0;
    52         while(k%p==0){
    53             c++;
    54             k/=p;
    55         }
    56         ans=qpow(p,max(n-c-1,0),MOD);
    57         int count=(p-1)/GCD;
    58         ans=(ans*count)%MOD;
    59         printf("%lld
    ",ans);
    60     }
    61     return 0;
    62 }

     官方题解:

  • 相关阅读:
    Jconsole连接远程服务器
    limesurvey设置短调查问卷url
    centos7 安装R和Rstudio客户端
    p便签,去掉首行缩进
    linux mint运行docker
    Kafka高可用实现
    利用ZooKeeper简单实现分布式锁
    如何判断一个数是否在40亿个整数中?
    稀疏矩阵乘法
    Java 软引用和弱引用
  • 原文地址:https://www.cnblogs.com/7391-KID/p/7224966.html
Copyright © 2020-2023  润新知