有些数字具有有趣的特性。例如:
89 → 8¹ + 9² = 89 * 1
695 → 6² + 9³ + 5⁴= 1390 = 695 * 2
46288 → 4³ + 6⁴+ 2⁵ + 8⁶ + 8⁷ = 2360688 = 46288 * 51
给定一个正整数 n,写成 abcd…(a, b, c, d… 是数字)和一个正整数 p
- 我们想要找到一个正整数 k,如果它存在的话,使得 n 的数字之和对 p 的连续幂等于 k n。
换句话说:
是否存在整数 k 例如: (a ^ p + b ^ (p+1) + c ^(p+2) + d ^ (p+3) + …) = n * k
如果是这种情况,我们将返回 k,如果不是,则返回 -1。
注意 :n 和 p 将始终作为严格的正整数给出。
dig_pow(89, 1) 返回值 1 因为 8¹ + 9² = 89 = 89 * 1
dig_pow(92, 1) 返回值 -1 因为 9¹ + 2²=13 无法整除92
dig_pow(695, 2) 返回值 2 因为 6² + 9³ + 5⁴= 1390 = 695 * 2
dig_pow(46288, 3) 返回值 51 因为 4³ + 6⁴+ 2⁵ + 8⁶ + 8⁷ = 2360688 = 46288 * 51
题目难度:较易
题目来源:Playing with digits | Codewars
def dig_pow(n: int, p:int) -> int:
# your code
assert dig_pow(89, 1) == 1
assert dig_pow(92, 1) == -1
assert dig_pow(46288, 3) == 51
assert dig_pow(2646798, 1) == 1
assert dig_pow(3456789, 1) == -1
assert dig_pow(63761, 3) == 1
assert dig_pow(132921, 3) == 4
assert dig_pow(10383, 6) == 12933
solr
(羽山秋人)
2
def dig_pow(n: int, p: int) -> int:
sum = 0
for i in str(n):
sum += pow(int(i), p)
p = p + 1
if sum % n == 0:
return sum // n
else:
return -1
qunzi
(群子)
3
def dig_pow(n: int, p:int) -> int:
sum=0
for i in str(n):
sum+=pow(int(i),p)
p+=1
return sum/n if sum%n==0 else -1
assert dig_pow(89, 1) == 1
assert dig_pow(92, 1) == -1
assert dig_pow(46288, 3) == 51
assert dig_pow(2646798, 1) == 1
assert dig_pow(3456789, 1) == -1
assert dig_pow(63761, 3) == 1
assert dig_pow(132921, 3) == 4
assert dig_pow(10383, 6) == 12933
lekaixin
(ALe阿乐)
4
def dig_pow(n: int, p:int) -> int:
res_list=[]
n_list=[int(str(n)[i]) for i in range(len(str(n)))]
for j in range(len(n_list)):
res_list.append(n_list[j]**p)
p+=1
if sum(res_list)%n==0:
return sum(res_list)//n
else:
return -1
assert dig_pow(89, 1) == 1
assert dig_pow(92, 1) == -1
assert dig_pow(46288, 3) == 51
assert dig_pow(2646798, 1) == 1
assert dig_pow(3456789, 1) == -1
assert dig_pow(63761, 3) == 1
assert dig_pow(132921, 3) == 4
assert dig_pow(10383, 6) == 12933