zoukankan      html  css  js  c++  java
  • hdu 2837 坑题。

    Calculation

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 1414    Accepted Submission(s): 291


    Problem Description
    Assume that f(0) = 1 and 0^0=1. f(n) = (n%10)^f(n/10) for all n bigger than zero. Please calculate f(n)%m. (2 ≤ n , m ≤ 10^9, x^y means the y th power of x).
     
    Input
    The first line contains a single positive integer T. which is the number of test cases. T lines follows.Each case consists of one line containing two positive integers n and m.
     
    Output
    One integer indicating the value of f(n)%m.
     
    Sample Input
    2 24 20 25 20
     
    Sample Output
    16 5
     
    Source
     
     1 /**
     2 a ^ b % c= a ^ ( b % phi ( c )  +  phi ( c ) ) % c      条件:(b>=c)  phi(n)为n的欧拉函数值
     3 我想说(⊙o⊙)…,完全搞不懂标程
     4 **/
     5 #include<iostream>
     6 #include<stdio.h>
     7 #include<cstring>
     8 #include<cstdlib>
     9 using namespace std;
    10 typedef __int64 LL;
    11 
    12 LL Euler(LL n)
    13 {
    14     LL temp =n,i;
    15     for(i=2;i*i<=n;i++)
    16     {
    17         if(n%i==0)
    18         {
    19             while(n%i==0)
    20                 n=n/i;
    21             temp=temp/i*(i-1);
    22         }
    23     }
    24     if(n!=1) temp=temp/n*(n-1);
    25     return temp;
    26 }
    27 LL pow_mod(LL a,LL b,LL p){
    28     LL ans=1;
    29     while(b)
    30     {
    31         if(b&1) ans=(ans*a)%p;
    32         b=b>>1;
    33         a=(a*a)%p;
    34     }
    35     return ans;
    36 }
    37 LL fuck(LL a,LL n,LL m)
    38 {
    39     LL i,ans=1;
    40     for(i=1;i<=n;i++)
    41     {
    42         ans=ans*a;
    43         if(ans>=m) return ans;
    44     }
    45     return ans;
    46 }
    47 LL dfs(LL n,LL m){
    48    LL ans,p,nima;
    49    if(n==0) return 1;
    50    if(n<10) return n;
    51    p = Euler(m);
    52    ans=dfs(n/10,p);
    53 
    54    nima = fuck(n%10,ans,m);
    55    if(nima>=m){
    56         ans=pow_mod(n%10,ans%p+p,m);
    57         if(ans==0) return m;
    58    }
    59    else{
    60        ans=pow_mod(n%10,ans,m);
    61    }
    62    return ans;
    63 }
    64 int main()
    65 {
    66     int T;
    67     LL n,m;
    68     scanf("%d",&T);
    69     while(T--){
    70         scanf("%I64d%I64d",&n,&m);
    71         printf("%I64d
    ",dfs(n,m)%m);
    72     }
    73     return 0;
    74 }
  • 相关阅读:
    devexpress toolbar 填充整行宽度
    2. Rust的三板斧 安全,迅速,并发
    1. rust的优点
    谈谈我对sku的理解(3)----页面效果
    谈谈我对sku的理解(2)----数据库设计
    谈谈我对sku的理解(1)
    我眼里的奇酷手机360OS
    Oracle中的wm_concat()函数
    获取java本地系统信息 Properties
    java 获取用户的ip都是 127.0.0.1
  • 原文地址:https://www.cnblogs.com/tom987690183/p/3714994.html
Copyright © 2011-2022 走看看