Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在同一时间查找多个整数,然后根据这些整数执行打印命令_Python_Integer - Fatal编程技术网

Python 如何在同一时间查找多个整数,然后根据这些整数执行打印命令

Python 如何在同一时间查找多个整数,然后根据这些整数执行打印命令,python,integer,Python,Integer,我正在尝试创建一个程序,该程序将查找平方根、立方根、四分之一根和五倍根在2^60以下的每个数字。每次运行命令时,我只得到每个平方数,这就是我编程变量Num1的结果 代码: 对不起,代码不好,我真的是新手。 Num2-Num5是根数Num1的答案,如果它们都是整数,我的目标是让print命令给出原始数字,Num1,正如Julien指出的,由于精度问题,在这个问题中使用浮点数是有问题的。此外,您在2^60之前一直在进行迭代,这可能会非常慢 简单但缓慢的方法 一个简单的方法是生成所有具有平方根的整数,

我正在尝试创建一个程序,该程序将查找平方根、立方根、四分之一根和五倍根在2^60以下的每个数字。每次运行命令时,我只得到每个平方数,这就是我编程变量Num1的结果

代码:

对不起,代码不好,我真的是新手。
Num2-Num5是根数Num1的答案,如果它们都是整数,我的目标是让print命令给出原始数字,Num1

,正如Julien指出的,由于精度问题,在这个问题中使用浮点数是有问题的。此外,您在2^60之前一直在进行迭代,这可能会非常慢

简单但缓慢的方法

一个简单的方法是生成所有具有平方根的整数,然后生成所有具有立方根的整数,依此类推。在那之后,做一个到目前为止我们生成的所有数字的交集

这个过程可以很容易地完成,我们需要从1迭代到n^1/k,以生成具有第k个根的数,如果i^k小于或等于我们的最大数,那么我们已经找到了第k个根。守则:

def kth_roots(n, k):
  i = 1
  ans = []
  while i ** k <= n:
    ans.append(i ** k)
    i += 1

  return ans

n = 2 ** 60
two = kth_roots(n, 2)
three = kth_roots(n, 3)
four = kth_roots(n, 4)
five = kth_roots(n, 5)

answer = set(two) & set(three) & set(four) & set(five)
print(answer)
from fractions import gcd

def _lcm(x, y):
  return (x * y) // gcd(x, y)


maxm = 2 ** 60
lcm = reduce(_lcm, [2, 3, 4, 5], 1)

a = 1
while a ** lcm <= maxm:
  print(a ** lcm)
  a += 1
一种基于可分性的方法

我将提出一个答案,你将有你的最大数字表示为一个权力的形式x^y

注意,如果一个数字可以表示为b^e,那么它将有一个整数平方根,例如e可以被2整除,如果e可以被3整除,那么它将有一个整数立方根,依此类推。所以一个更好的方法,是检查哪些指数将满足你的条件被2,3,4和5整除。最后,我们必须确定b的值,我们可以使用蛮力,并在大于x^y时停止

这样,我们就不必玩可能让人头疼的浮点数了。一些代码:

max_exp = 60
max_base = 2
maxm = max_base ** max_exp

ans = 0
e = 1
print(1) # Trivial case
while True:
  if e % 2 == 0 and e % 3 == 0 and e % 4 == 0 and e % 5 == 0:
    b = 2
    flag = False
    while b ** e <= maxm:
      flag = True
      print(b ** e)
      b += 1

    if flag is False:
      break

  e += 1
编辑:正如Hugh Bothwel所提到的,可以减少幂的可除性检查,以计算[2,3,4,5]的LCM,即60,因此任何数字a^60都有提到的整数根。剩下的就是对a的价值观施加暴力。守则:

def kth_roots(n, k):
  i = 1
  ans = []
  while i ** k <= n:
    ans.append(i ** k)
    i += 1

  return ans

n = 2 ** 60
two = kth_roots(n, 2)
three = kth_roots(n, 3)
four = kth_roots(n, 4)
five = kth_roots(n, 5)

answer = set(two) & set(three) & set(four) & set(five)
print(answer)
from fractions import gcd

def _lcm(x, y):
  return (x * y) // gcd(x, y)


maxm = 2 ** 60
lcm = reduce(_lcm, [2, 3, 4, 5], 1)

a = 1
while a ** lcm <= maxm:
  print(a ** lcm)
  a += 1

这个计划注定要失败。除了效率很低之外,尝试1000**0.33333,你不会得到10。你不应该在这种类型的测试中使用浮点数…你是说每一个带平方根的整数…?你不是要求程序打印Num1。。。LCM2,3,4,5是60 2^2*3*5,所以你要寻找每一个数n E{1,2}