应该不难解,回去试试看。
感谢大神! for num in range(1000000):
comp = num
num = list(str(num))
if len(num)%2 == 0:
ps = int(len(num)/2)
num_front = ''
num_behind = ''
for i in range(ps):
num_front = num + num_front
for i in range(ps):
num_behind = num + num_behind
num_front = int(num_front)
num_behind = int(num_behind)
if (num_front + num_behind)**2 == comp :
print(comp) 看到数字大就想到用numpy,结果最后都是平方,根本没几个
还不如先筛选范围{:10_269:}
import numpy as np
def fun(n):
arr = np.arange(10, n)
arv = np.floor(np.log10(arr))
half = np.where(arv % 2, 10**((arv+1)//2), 1)
return np.sum(arr[(arr//half + arr%half)**2 == arr]) # 120
def isThunder(n):
a = len(str(n))
num1 = ''
num2 = ''
if not a % 2: # 偶数个数
for each in range(len(str(n))//2):
num1 += str(n)
for each in range(len(str(n))//2,len(str(n))):
num2 += str(n)
num1 = int(num1)
num2 = int(num2)
if pow(num1+num2,2) == n:
return True
return False
def main():
n = 10
summ = 0
while n < 1000000:
if isThunder(n):
print(n)
summ += n
n += 1
print("sum is ", summ)
if __name__ == '__main__':
main()
'''
81
2025
3025
9801
494209
998001
sum is1507142
'''
for i in range(10,1000000):
for j in range(2,7):
a=i%(10**j)
b=i//(10**j)
if (a+b)**2==i:
print(i) 本帖最后由 shigure_takimi 于 2017-12-1 12:01 编辑
def isLeipishu(n):
length = len(str(n))
if length%2 != 0:
return False
else:
a = int(str(n)[:length//2])
b = int(str(n))
if (a+b)**2 == n:
return True
else:
return False
def getLeipishu(stop):
leipishuList = []
if stop < 10:
return []
else:
for i in range(10, stop):
if isLeipishu(i):
leipishuList.append(i)
return leipishuList, sum(leipishuList)
print(getLeipishu(1000000))
# result: (, 1507142)
本帖最后由 Bill888 于 2017-12-19 13:01 编辑
def check(num1):
num2 = num1 ** 2
i = 1
while True:
if i > 1 and num2 % (10 ** i) == 0:
i += 1
continue
if ((num2 % (10 ** i)) + (num2 // (10 ** i))) == num1:
return True
else:
i += 1
if num2 // (10 ** i) == 0:
return False
sum1 = 0
list1 = []
for i in range(2, 1000):
if check(i):
sum1 += i ** 2
list1.append(i ** 2)
print(list1)
print(sum1)
#
# 1595451
百度了下,100和88209应该也是雷劈数吧 count=10
list2=[]
SUM=0
while count<1000000:
list1=list(str(count))
number_left=0
number_right=0
number_left = count//pow(10,len(list1)//2)
number_right = count%pow(10,len(list1)//2)
number=number_left + number_right
if number*number==count:
list2.append(count)
SUM+=count
count+=1
if len(str(count))%2 != 0:
count*=10
print(list2)
print(SUM)
i, c= 0, 0
while i <= 1000 :
k = len(str(i * i))
if k % 2 == 0 and i * i // 10 ** (k / 2) + i * i % 10 ** (k / 2) == i :
c += i * i
i += 1
print(c) SixPy 发表于 2017-11-3 14:47
这题用 pymprog 怎么解?
请问这种习题册在哪可以买啊 def fun120(n):
sum1 = 0
count = 0
for each in range(1,n):
if not len(str(each))%2:
i = len(str(each)) // 2
if (int(str(each)[:i]) + int(str(each))) ** 2 == each:
print(each)
sum1 += each
count += 1
print("共有{}个雷劈数,它们的和是{}".format(count,sum1))
fun120(1000000) 来凑个热闹target=[]
for i in range(1,1000001):
if len(str(i))%2==0:#必定是偶数位
lst=list(str(i))
lst_len=len(lst)/2 # 判断中分坐标
a=int("".join(lst)) # 前半部分
b=int("".join(lst))#后半部分
res=(a+b)**2
if res==i:
target.append(i)
print(i)
print(sum(target)) sum_=0
for i in range(10,1000000):
n=str(i);k=len(n)
if k%2:continue
k//=2
if (int(n[:k])+int(n))**2==i:sum_+=i
print(_sum) ans = []
num = 1
while num * num < 1000000:
pre = num * num
str_pre = str(pre)
n = len(str_pre)
if n % 2 == 0 and int(str_pre[:n // 2]) + int(str_pre) == num:
ans.append(pre)
num += 1
print('1000000以下的雷劈数有:',ans)
print('1000000以下的雷劈数的和 =',sum(ans)) result = []
def calc(i, j):
num1 = int((str(i)))
num2 = int((str(i)))
if (((num1+num2)*(num1+num2)) == i):
return True
for i in range(10,1000000):
l = len(str(i))
if l % 2 == 0:
if(calc(i, l)):
result.append(i);
print(result)
sum = sum(result)
print(sum)
页:
1
[2]