Euler项目中的意外输出(项目编号3)

2024-04-19 13:42:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图项目欧拉问题3与13195为样本数,似乎已成为卡住。任何帮助都会很感激,也许会朝着正确的方向轻推。你知道吗

这是为了发展我对python的理解。你知道吗

multiples=[]

n = 13195

for i in range(1, 13196):
  if n%i ==0:
    multiples.append(i)

for m in multiples:
  if n>m>1:
    for y in (2, m):
      if not m%y==0:
        print (m)

我希望输出是:
5
7
13
29岁

但我得到了13195的所有因子。你知道吗


Tags: 项目inforifnotrange方向因子
2条回答
import sympy 
multiples=[]

n = 13195

for i in range(1, 13196):
  if n%i ==0:
    multiples.append(i)

for m in multiples:
  if n>m>1:
    if sympy.isprime(m):
        print(m)

python的规则是不创建其他人已经创建的函数。isprime函数已经创建,因此不需要重新创建它。你知道吗

multiples=[]

n = 13195

for i in range(1, 13196):
  if n%i ==0:
    multiples.append(i)

for m in multiples:
  if n>m>1:
       for i in range(2, m//2): 

       # If num is divisible by any number between  
       # 2 and n / 2, it is not prime  
           if (m % i) == 0:
               break
       else: 
            print(m) 

它使用else with for循环的概念,如果for循环中断,else部分将不执行,如果for循环成功完成而没有中断,那么else部分将被执行。你知道吗

问题在于代码片段的素数计算部分。你知道吗

假设multiples具有值:[1, 5, 7, 13, 29, 35, 65]。当应用程序进入循环for y in (2, m)

迭代1: for y in (2, 5) 最初,y是2,它执行5%2并打印5,因为5%2不是0。然后y将变成5,它做5%5,什么也不打印。你知道吗

。。。你知道吗

迭代7: for y in (2, 65) 最初,y是2,它执行65%2并打印65,因为65%2不是0。然后y将变成65,它做65%65,什么也不打印。你知道吗

由于使用了for y in (2,m)而不是for y in range (2,m),因此循环将始终执行两次,值为y=2y=m。你知道吗

基本上,用2和它本身对所有倍数进行%运算,而不是计算素数。下面是实现所需输出的示例代码段。你知道吗

for m in multiples:
 if n>m>1:
    for y in range (2, (int)(m/2)):
      if m%y==0:
            flag=1
    if flag==0:
       print (m)
    flag=0

相关问题 更多 >