Skip to content

Commit 697b934

Browse files
committed
feat: add solutions to lc problem: No.0372
No.0372.Super Pow
1 parent ea1b388 commit 697b934

File tree

6 files changed

+263
-3
lines changed

6 files changed

+263
-3
lines changed

solution/0300-0399/0372.Super Pow/README.md

+92-2
Original file line numberDiff line numberDiff line change
@@ -49,27 +49,117 @@
4949
<li><code>b</code> 不含前导 0</li>
5050
</ul>
5151

52-
5352
## 解法
5453

5554
<!-- 这里可写通用的实现逻辑 -->
5655

56+
乘方快速幂。
57+
5758
<!-- tabs:start -->
5859

5960
### **Python3**
6061

6162
<!-- 这里可写当前语言的特殊实现逻辑 -->
6263

6364
```python
64-
65+
class Solution:
66+
def superPow(self, a: int, b: List[int]) -> int:
67+
MOD = 1337
68+
ans = 1
69+
for e in b[::-1]:
70+
ans = ans * pow(a, e, MOD) % MOD
71+
a = pow(a, 10, MOD)
72+
return ans
6573
```
6674

6775
### **Java**
6876

6977
<!-- 这里可写当前语言的特殊实现逻辑 -->
7078

7179
```java
80+
class Solution {
81+
private static final int MOD = 1337;
82+
83+
public int superPow(int a, int[] b) {
84+
int ans = 1;
85+
for (int i = b.length - 1; i >= 0; --i) {
86+
ans = (int) ((long) ans * quickPowAndMod(a, b[i]) % MOD);
87+
a = quickPowAndMod(a, 10);
88+
}
89+
return ans;
90+
}
91+
92+
private int quickPowAndMod(int a, int b) {
93+
int ans = 1;
94+
while (b > 0) {
95+
if ((b & 1) == 1) {
96+
ans = (ans * (a % MOD)) % MOD;
97+
}
98+
b >>= 1;
99+
a = (a % MOD) * (a % MOD) % MOD;
100+
}
101+
return ans;
102+
}
103+
}
104+
```
105+
106+
### **C++**
107+
108+
```cpp
109+
class Solution {
110+
const int MOD = 1337;
111+
public:
112+
int superPow(int a, vector<int>& b) {
113+
int ans = 1;
114+
for (int i = b.size() - 1; i >= 0; --i)
115+
{
116+
ans = (long) ans * quickPowAndMod(a, b[i]) % MOD;
117+
a = quickPowAndMod(a, 10);
118+
}
119+
return ans;
120+
}
121+
122+
int quickPowAndMod(int a, int b) {
123+
int ans = 1;
124+
while (b)
125+
{
126+
if (b & 1)
127+
{
128+
ans = (ans * (a % MOD)) % MOD;
129+
}
130+
b >>= 1;
131+
a = ((a % MOD) * (a % MOD)) % MOD;
132+
}
133+
return ans;
134+
}
135+
};
136+
```
72137

138+
### **Go**
139+
140+
```go
141+
const mod = 1337
142+
143+
func superPow(a int, b []int) int {
144+
ans := 1
145+
for i := len(b) - 1; i >= 0; i-- {
146+
ans = ans * quickPowAndMod(a, b[i]) % mod
147+
a = quickPowAndMod(a, 10)
148+
}
149+
return ans
150+
}
151+
152+
func quickPowAndMod(a, b int) int {
153+
ans := 1
154+
for b > 0 {
155+
if b&1 > 0 {
156+
ans = ans * a % mod
157+
}
158+
b >>= 1
159+
a = ((a % mod) * (a % mod)) % mod
160+
}
161+
return ans
162+
}
73163
```
74164

75165
### **...**

solution/0300-0399/0372.Super Pow/README_EN.md

+90-1
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,102 @@
3838
### **Python3**
3939

4040
```python
41-
41+
class Solution:
42+
def superPow(self, a: int, b: List[int]) -> int:
43+
MOD = 1337
44+
ans = 1
45+
for e in b[::-1]:
46+
ans = ans * pow(a, e, MOD) % MOD
47+
a = pow(a, 10, MOD)
48+
return ans
4249
```
4350

4451
### **Java**
4552

4653
```java
54+
class Solution {
55+
private static final int MOD = 1337;
56+
57+
public int superPow(int a, int[] b) {
58+
int ans = 1;
59+
for (int i = b.length - 1; i >= 0; --i) {
60+
ans = (int) ((long) ans * quickPowAndMod(a, b[i]) % MOD);
61+
a = quickPowAndMod(a, 10);
62+
}
63+
return ans;
64+
}
65+
66+
private int quickPowAndMod(int a, int b) {
67+
int ans = 1;
68+
while (b > 0) {
69+
if ((b & 1) == 1) {
70+
ans = (ans * (a % MOD)) % MOD;
71+
}
72+
b >>= 1;
73+
a = (a % MOD) * (a % MOD) % MOD;
74+
}
75+
return ans;
76+
}
77+
}
78+
```
79+
80+
### **C++**
81+
82+
```cpp
83+
class Solution {
84+
const int MOD = 1337;
85+
public:
86+
int superPow(int a, vector<int>& b) {
87+
int ans = 1;
88+
for (int i = b.size() - 1; i >= 0; --i)
89+
{
90+
ans = (long) ans * quickPowAndMod(a, b[i]) % MOD;
91+
a = quickPowAndMod(a, 10);
92+
}
93+
return ans;
94+
}
95+
96+
int quickPowAndMod(int a, int b) {
97+
int ans = 1;
98+
while (b)
99+
{
100+
if (b & 1)
101+
{
102+
ans = (ans * (a % MOD)) % MOD;
103+
}
104+
b >>= 1;
105+
a = ((a % MOD) * (a % MOD)) % MOD;
106+
}
107+
return ans;
108+
}
109+
};
110+
```
47111

112+
### **Go**
113+
114+
```go
115+
const mod = 1337
116+
117+
func superPow(a int, b []int) int {
118+
ans := 1
119+
for i := len(b) - 1; i >= 0; i-- {
120+
ans = ans * quickPowAndMod(a, b[i]) % mod
121+
a = quickPowAndMod(a, 10)
122+
}
123+
return ans
124+
}
125+
126+
func quickPowAndMod(a, b int) int {
127+
ans := 1
128+
for b > 0 {
129+
if b&1 > 0 {
130+
ans = ans * a % mod
131+
}
132+
b >>= 1
133+
a = ((a % mod) * (a % mod)) % mod
134+
}
135+
return ans
136+
}
48137
```
49138

50139
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
class Solution {
2+
const int MOD = 1337;
3+
public:
4+
int superPow(int a, vector<int>& b) {
5+
int ans = 1;
6+
for (int i = b.size() - 1; i >= 0; --i)
7+
{
8+
ans = (long) ans * quickPowAndMod(a, b[i]) % MOD;
9+
a = quickPowAndMod(a, 10);
10+
}
11+
return ans;
12+
}
13+
14+
int quickPowAndMod(int a, int b) {
15+
int ans = 1;
16+
while (b)
17+
{
18+
if (b & 1)
19+
{
20+
ans = (ans * (a % MOD)) % MOD;
21+
}
22+
b >>= 1;
23+
a = ((a % MOD) * (a % MOD)) % MOD;
24+
}
25+
return ans;
26+
}
27+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
const mod = 1337
2+
3+
func superPow(a int, b []int) int {
4+
ans := 1
5+
for i := len(b) - 1; i >= 0; i-- {
6+
ans = ans * quickPowAndMod(a, b[i]) % mod
7+
a = quickPowAndMod(a, 10)
8+
}
9+
return ans
10+
}
11+
12+
func quickPowAndMod(a, b int) int {
13+
ans := 1
14+
for b > 0 {
15+
if b&1 > 0 {
16+
ans = ans * a % mod
17+
}
18+
b >>= 1
19+
a = ((a % mod) * (a % mod)) % mod
20+
}
21+
return ans
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class Solution {
2+
private static final int MOD = 1337;
3+
4+
public int superPow(int a, int[] b) {
5+
int ans = 1;
6+
for (int i = b.length - 1; i >= 0; --i) {
7+
ans = (int) ((long) ans * quickPowAndMod(a, b[i]) % MOD);
8+
a = quickPowAndMod(a, 10);
9+
}
10+
return ans;
11+
}
12+
13+
private int quickPowAndMod(int a, int b) {
14+
int ans = 1;
15+
while (b > 0) {
16+
if ((b & 1) == 1) {
17+
ans = (ans * (a % MOD)) % MOD;
18+
}
19+
b >>= 1;
20+
a = (a % MOD) * (a % MOD) % MOD;
21+
}
22+
return ans;
23+
}
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
class Solution:
2+
def superPow(self, a: int, b: List[int]) -> int:
3+
MOD = 1337
4+
ans = 1
5+
for e in b[::-1]:
6+
ans = ans * pow(a, e, MOD) % MOD
7+
a = pow(a, 10, MOD)
8+
return ans

0 commit comments

Comments
 (0)