• ZOJ 2674 Strange Limit


    欧拉函数。

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #define MAXSIZE 100003
    #define N 100003
    using namespace std;
    
    long long prime[10030];
    long long flag[100003];
    long long cn;
    
    void sushu()
    {
        memset(flag,0,sizeof(flag));
        cn=0;
        long long i,j;
        for (i=2;i<MAXSIZE+1;i++)
        {
            if(!flag[i])
                 prime[cn++]=i;
            for(j=0;(j<cn)&&(prime[j]*i<MAXSIZE+1);j++)
            {
                flag[i*prime[j]]=1;    
            }
            
        }
    }
    long long fast(long long a,long long p,long long m)
    {
        long long r,k;
        if(p==0)
            return 1%m;
        else if(p==1)
            return a%m;
        r=a%m;
        k=1;
        while(p>1)
        {
            if((p&1)!=0)
                k=(k*r)%m;
            r=(r*r)%m;
            p>>=1;
        }
           return (r*k)%m;
    }
    long long fac(long long m)
    {
        long long i,res=1;
        for(i=m;i>=1;i--)
            res*=i;
        return res;
    }
    long long ola(long long n)
    {
        long long i,n1=n;
        long long res=n;
        for(i=0;(i<cn)&&prime[i]*prime[i]<=n;i++)
        {
            if(n%prime[i]==0)
            {
                res=res/prime[i]*(prime[i]-1);
                while(n1%prime[i]==0)
                    n1/=prime[i];
            }
        }
        if(n1!=1)
            res=res/n1*(n1-1);
        return res;
    }
    long long solve(long long a,long long m)
    {
        if(m==1)
            return 0;
        else 
        {
            long long tmp=ola(m);           //phi[m];     //euler(m);
            return fast(a,tmp,m)*fast(a,solve(a,tmp),m);
        }
    }
    
    
    int main()
    {
        long long m,m1;
        long long p;
        sushu();
        bool tag=false;
        while(scanf("%lld%lld",&p,&m1)!=EOF)
        {
            if(tag)
            {
                puts("");
            }
            else tag=true;
            m=fac(m1);
            printf("%lld
    ",solve(p,m)%m);
        }
        return 0;
    }
    View Code

    作者:whatbeg
    出处1:http://whatbeg.com/
    出处2:http://www.cnblogs.com/whatbeg/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    更多精彩文章抢先看?详见我的独立博客: whatbeg.com

  • 相关阅读:
    HTC G12 HBOOT 2.0.0002 官解、降级精简教程!
    android call require api level
    刷机流程
    Android通过tcpdump抓包
    [原创]c#的线性表 Virus
    [原创]c++线性表的插入 Virus
    [原创]关于编程论坛封我ID的意见 Virus
    [原创]文件管理 Virus
    [原创]c#高级编程学习笔记(连载_委托) Virus
    [原创]c#中的内存管理 Virus
  • 原文地址:https://www.cnblogs.com/whatbeg/p/3472894.html
Copyright © 2020-2023  润新知