我需要找到数字N的配对(i,j)和配对数,以满足以下条件:

例如,对于N = 50,对的数量是3,即(1,1)(4,8)(9,27).

我try 了以下函数代码,但对于N = 10000或更多这样的大数字来说,它花费了太多时间:

def compute_pairs(N):
    pair = []
   
    for i in range (1, N):
        for j in range (i, N):
            print( 'j =', j)
            if i*i*i == j*j:
                new_pair = (i,j)
                pair.append(new_pair)
    print(pair)
    return len(pair)

推荐答案

k为满足i*i*i == j*j的某个整数i的平方根,其中j也是一个整数.因为k是整数的平方根,所以k*k是整数.从方程中,我们可以求解j等于k*k*k,所以这也是一个整数.

由于k*k*k是一个整数,k*k是一个整数,因此将这两者相除后,k就是有理数.但是k是整数的平方根,所以它必须是整数或无理.因为它是有理数,所以它必须是整数.

因为k是一个整数,所以对于整数k,所有解都是(k*k, k*k*k).因为我们将迭代k>=1,我们知道k*k <= k*k*k,也就是i <= j,所以我们不必担心.当k*k*k达到N时,我们只需要停止迭代.

from itertools import count # unbounded range; we will `break` when appropriate
def compute_pairs(N):
    result = []
    for k in count(1):
        i, j = k*k, k*k*k
        if j >= N:
            break
        result.append((i, j))
    return result

这几乎是瞬间运行的,即使是N000个中的N个,也不需要C级优化.

Python相关问答推荐

可变参数数量的重载类型(args或kwargs)

Pandas 都是(),但有一个门槛

如何将Docker内部运行的mariadb与主机上Docker外部运行的Python脚本连接起来

Godot:需要碰撞的对象的AdditionerBody2D或Area2D以及queue_free?

如何调整QscrollArea以正确显示内部正在变化的Qgridlayout?

将9个3x3矩阵按特定顺序排列成9x9矩阵

在np数组上实现无重叠的二维滑动窗口

从Windows Python脚本在WSL上运行Linux应用程序

* 动态地 * 修饰Python中的递归函数

网格基于1.Y轴与2.x轴显示在matplotlib中

跳过嵌套JSON中的级别并转换为Pandas Rame

基于多个数组的多个条件将值添加到numpy数组

Flask运行时无法在Python中打印到控制台

查看pandas字符列是否在字符串列中

Python类型提示:对于一个可以迭代的变量,我应该使用什么?

如何获得3D点的平移和旋转,给定的点已经旋转?

Polars表达式无法访问中间列创建表达式

递归链表反转与打印语句挂起

Pandas ,快速从词典栏中提取信息到新栏

pyspark where子句可以在不存在的列上工作