c++选手写的java,为啥TLE,MLE?
查看原帖
c++选手写的java,为啥TLE,MLE?
291939
lihuazou楼主2020/10/12 14:26
import java.math.BigInteger;
import java.util.Scanner;

import static java.lang.System.exit;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        long n=scanner.nextLong();
        long m=scanner.nextLong();
        BigInteger p = scanner.nextBigInteger();
        long ouler=m;
        long temp = m;
        for(long i=2;i*i<=temp;i++){
            if(temp%i==0){
                ouler=(ouler/i)*(i-1);
                while(temp%i==0){
                    temp/=i;
                }
            }
        }
        if(temp>1){
            ouler=(ouler/temp)*(temp-1);
        }
        String str = String.valueOf(ouler);
        BigInteger t = new BigInteger(str);
        if(p.compareTo(t)>=0){
            p=p.mod(t);
            p=p.add(t);
            long pw  = p.longValue();
            long ans = quickpow(n,pw,m);
            System.out.println(ans);
        }else{
            long pw = p.longValue();
            long ans = quickpow(n,pw,m);
            System.out.println(ans);
        }

    }

    private static long quickpow(long n, long pw, long m) {
        long ans = 1;
        n = n%m;
        while(pw>0){
            if(pw%2==1){
                ans=(ans*n)%m;
            }
            n=(n*n)%m;
            pw/=2;
        }
        return ans;
    }
}

2020/10/12 14:26
加载中...