NC23046. 华华教月月做数学
描述
输入描述
第一行一个正整数T表示测试数据组数。
接下来T行,每行三个正整数A、B、P,含义如上文。
输出描述
输出T行,每行一个非负整数表示答案。
示例1
输入:
2 2 5 10 57284938291657 827493857294857 384729583748273
输出:
2 18924650048745
Go 解法, 执行用时: 104ms, 内存消耗: 1084K, 提交时间: 2023-08-11 09:45:54
package main import ( "fmt" "bufio" "os" "strconv" ) func main() { in:=bufio.NewScanner(os.Stdin) in.Split(bufio.ScanWords) in.Scan() n,_:=strconv.Atoi(in.Text()) for i:=0;i<n;i++{ in.Scan();a,_:=strconv.Atoi(in.Text()) in.Scan();b,_:=strconv.Atoi(in.Text()) in.Scan();p,_:=strconv.Atoi(in.Text()) fmt.Println(pow(a,b,p)) } } func mul(a,b,mod int)(ans int){ for ;a!=0;a>>=1{ if (a&1)!=0{ans=(ans+b)%mod} b=2*b%mod } return ans } func pow(a,b,p int)(int){ var ans int=1 for ;b!=0;b>>=1{ if (b&1)!=0{ans=mul(ans,a,p)}//ans*a a=mul(a,a,p)//a*a } return ans }
Java 解法, 执行用时: 435ms, 内存消耗: 20452K, 提交时间: 2023-08-11 09:45:13
import java.util.*; import java.math.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); for(int i=0;i<n;i++) { BigInteger a = sc.nextBigInteger(); BigInteger b = sc.nextBigInteger(); BigInteger p = sc.nextBigInteger(); System.out.println(a.modPow(b,p)); } } }
Python3 解法, 执行用时: 79ms, 内存消耗: 4580K, 提交时间: 2023-08-11 09:44:37
for _ in range(int(input())): a, b , p = map(int, input().split()) print(pow(a, b, p))