zoukankan      html  css  js  c++  java
  • UVA-10692 Huge Mods

    题目大意:计算a1^a2^a3^a4......^an模m的值。

    题目解析:幂取模运算的结果一定有周期。一旦找到周期就可把高次幂转化为低次幂。有降幂公式

            (a^x)%m=(a^(x%phi(m)+phi(m))%m  x>=phi(m)

    其中,phi()函数是欧拉函数。

    代码(代码有瑕疵)如下:

     1 # include<iostream>
     2 # include<cstdio>
     3 # include<cstring>
     4 # include<algorithm>
     5 using namespace std;
     6 # define ll long long
     7 int num[12],n;
     8 char start[8];
     9 int phi(int x)
    10 {
    11     int m=x;
    12     int ans=x;
    13     for(int i=2;i*i<=x;++i){
    14         if(m%i==0){
    15             ans=ans/i*(i-1);
    16             while(m%i==0)
    17                 m/=i;
    18         }
    19     }
    20     if(m>1)
    21         ans=ans/m*(m-1);
    22     return ans;
    23 }
    24 int mypow(int a,int b,int m)
    25 {
    26     int res=1;
    27     while(b){
    28         if(b&1)
    29             res=res*a%m;
    30         b>>=1;
    31         a=a*a%m;
    32     }
    33     return res;
    34 }
    35 int work(int i,int m)
    36 {
    37     if(i==n-1)
    38         return num[i]%m;
    39     int tm=phi(m);         
    40     int nm=work(i+1,tm)+tm;    
    41     return mypow(num[i],nm,m);
    42 }
    43 int main()
    44 {
    45     int cas=0;
    46     while(scanf("%s",start)&&start[0]!='#')
    47     {
    48         int mod=0;
    49         for(int i=0;i<strlen(start);++i)
    50             mod=mod*10+start[i]-'0';
    51         scanf("%d",&n);
    52         for(int i=0;i<n;++i)
    53             scanf("%d",&num[i]);
    54         printf("Case #%d: %d
    ", ++cas, work(0, mod));
    55     }
    56     return 0;
    57 }
  • 相关阅读:
    代码阅读:结构与逻辑
    ReactiveCocoa 中 RACSignal 所有变换操作底层实现分析(上)
    大白话讲解Promise(一)
    ReactiveCocoa 中 RACSignal 是如何发送信号的
    The Future Of ReactiveCocoa by Justin Spahr-Summers
    reactive programming
    【转】iOS中流(Stream)的使用
    NSStream 流式思想
    Future模式 总结
    备忘
  • 原文地址:https://www.cnblogs.com/20143605--pcx/p/4707890.html
Copyright © 2011-2022 走看看