Python程序:计算给定方程的值
假设我们得到五个整数a、b、c、d、n。我们需要计算((ab)(cd)) mod n。输出值为一个整数。
因此,如果输入为a = 2,b = 3,c = 2,d = 4,n = 10,则输出为6。
2^3 = 8 2^4 = 16 8^16 = 281474976710656 281474976710656 mod 10 = 6
为了解决这个问题,我们将遵循以下步骤:
- 定义一个函数helper()。它将接收n作为参数。
- p := n
- i := 2
- 当 i * i <= n 时,执行以下操作:
- 如果 n mod i 等于 0,则
- p := p - floor(p / i)
- 当 n mod i 等于 0 时,执行以下操作:
- n := floor(n / i)
- 如果 i 不等于 2,则
- i := i + 2
- 否则,
- i := i + 1
- 如果 n mod i 等于 0,则
- 如果 n > 1,则
- p := p - floor(p / n)
- 返回 p
- 如果 b 等于 0 或 (c 等于 0 且 d 不等于 0),则
- 返回 (a ^ 0) mod n
- 如果 c 等于 1 或 d 等于 0,则
- 返回 (a ^ b) mod n
- 如果 a 等于 0 或 a mod n 等于 0,则
- 返回 0
- 如果 d 等于 1,则
- 返回 (a ^ b * c) mod n
- p := helper(n)
- e := (c ^ d) mod p + p
- 返回 (((a ^ b) mod n) ^ e) mod n
示例
让我们来看下面的实现,以便更好地理解:
def helper(n): p = n i = 2 while i * i <= n: if n % i == 0: p -= p // i while n % i == 0: n = n // i if i != 2: i += 2 else: i += 1 if n > 1: p -= p // n return p def solve(a, b, c, d, n): if b == 0 or (c == 0 and d != 0): return pow(a, 0, n) if c == 1 or d == 0: return pow(a, b, n) if a == 0 or a % n == 0: return 0 if d == 1: return pow(a, b * c, n) p = helper(n) e = pow(c, d, p) + p return pow(pow(a, b, n), e, n) print(solve(2, 3, 2, 4, 10))
输入
2, 3, 2, 4, 10
输出
6
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP