我编写的代码返回给定数字的唯一素数因子。这就是代码。此代码不认为1是唯一的素数。 factorial3
是返回任何给定数字的阶乘列表的函数。
def factorials(n):
x=[j for j in range(1, ((n/2)+1)) if n%j==0]
x.append(n)
return x
n=input()
numbers=[]
for i in range(n):
numbers.append(input())
count=[0 for j in numbers]
for i,k in enumerate(numbers):
for j in factorial3(k):
if factorial3(j)==[1,j]:
count[i]+=1
列表count
为我提供了输入的唯一素数。
例如,对于2个数字10,20,因子是[2,5,10]和[2,5,10,20]。然而,独特的素因子分别为[2,5]和[2,5]。因此,计数是[2,2]
我正在努力实现与列表推导相同但迄今为止失败。这是我迄今为止尝试过的事情。
c=[0 for i in numbers]
new=[i+1 for i,k in enumerate(numbers) for j in factorial3(k) if factorial3(j)==[1,j]]
print new
new1=[c[i]+1 for i,k in enumerate(numbers) for j in factorial3(k) if factorial3(j)==[1,j]]
print new1
我几乎就在那里,只是错过了一次只减少一次迭代的事情。
答案 0 :(得分:0)
如果你想要素数因子,那么只需要达到平方根,而不是整个范围。
替换你的第一行:
c=[0 for i in numbers]
使用:
c=[0 for i in numbers**0.5]
答案 1 :(得分:0)
我能够通过以下代码实现我想要的目标。
new1=[i+1 for i,k in enumerate(numbers) for j in factorial3(k) if factorial3(j)==[1,j]]
c1={}
for i in new1:
if i not in c1:
c1[i]=1
else:
c1[i]+=1
sortedc=[v for k,v in sorted(c1.items(), key=lambda x:x[0])]
x=zip(numbers, sortedc)
此代码不会返回1的正确值,并且与所有其他正整数完美匹配。我在代码结束时手动添加了1的阶乘。