首页 > 试题广场 >

快速幂

[编程题]快速幂
  • 热度指数:9770 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
请你计算 的值。
一共有 q 次询问。

输入描述:
第一行输入一个正整数 q ,代表询问次数。
接下来每行输入三个正整数 a,b,p,代表一次询问。
数据范围:



输出描述:
对于每次询问,输出一个整数,代表  的值。
示例1

输入

2
2 2 6
3 4 10

输出

4
1
package main

import (
   "fmt"
   "math/big"
)

func main() {
   var q int
   var a int
   var b int
   var p int
   fmt.Scanf("%d\n", &q)
   for i := 0; i < q; i++ {
      fmt.Scanf("%d %d %d\n", &a, &b, &p)
      fmt.Println(getMod(a, b, p))
   }
}
func getMod(a int, b int, p int) int {
   if b == 0 {
      return 1 % p
   }
   t := big.NewInt(1)
   A := big.NewInt(int64(a))
   P := big.NewInt(int64(p))
   for b != 0 {
      if b&1 == 1 {
         t = t.Mul(t, A)
      }
      b >>= 1
      A = A.Mul(A, A)
   }
   mod := t.Mod(t, P)
   return int(mod.Int64())
}

发表于 2023-02-14 18:03:48 回复(0)

问题信息

难度:
2条回答 997浏览

热门推荐

通过挑战的用户

查看代码
快速幂