Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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‎

Lines changed: 92 additions & 2 deletions
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‎

Lines changed: 90 additions & 1 deletion
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
### **...**
Lines changed: 27 additions & 0 deletions
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+
};
Lines changed: 22 additions & 0 deletions
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+
}
Lines changed: 24 additions & 0 deletions
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+
}
Lines changed: 8 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /