相关疑难解决方法(0)

计算给定数量的除数数的算法

计算给定数量的除数的最佳算法(性能方面)是什么?

如果您能提供伪代码或链接到一些示例,那将会很棒.

编辑:所有答案都非常有帮助,谢谢.我正在实施Atkin的Sieve,然后我将使用类似于Jonathan Leffler所说的东西.Justin Bozonier发布的链接提供了我想要的更多信息.

algorithm performance pseudocode

172
推荐指数
11
解决办法
14万
查看次数

是否有一个简单的算法可以确定X是否是素数,而不是混淆一个凡人的程序员?

我一直试图通过Project Euler工作,并注意到一些问题要求你确定一个素数作为其中的一部分.

  1. 我知道我可以将x除以2,3,4,5,...,X的平方根,如果我到达平方根,我可以(安全地)假设该数字是素数.不幸的是,这个解决方案似乎非常笨重.

  2. 我已经研究了如何确定数字是否为素数的更好的算法,但是快速混淆.

是否有一个简单的算法可以确定X是否是素数,而不是混淆一个凡人的程序员?

非常感谢!

algorithm primes

29
推荐指数
5
解决办法
1万
查看次数

如何足够快地计算减少适当分数的数量?

我目前正在解决一个数学问题,其中我需要计算减少的适当分数的数量,分子和分母都超过1000000(10 ^ 6).

我有适用于小数字的代码; 给出的示例(值= 8)给出正确的(给定的)答案21.

但是由于我不知道的原因,这个代码似乎对大数字来说非常慢.我在SO上阅读了大量类似的问题,但找不到任何有用的东西.我仔细研究了这个这个,但这并没有真正帮助我.我的代码以可接受的速度运行,直到1000,然后它变得超级超慢.

import math

def is_prime(n):
    if n == 2:
        return True
    if n % 2 == 0 or n <= 1:
        return False
    sqr = int(math.sqrt(n)) + 1
    for divisor in range(3, sqr, 2):
        if n % divisor == 0:
            return False
    return True

def get_divisors(n):
    liste = [1]
    if n % 2 == 0:
        liste.append(2)
    for divisor in range(3, n+1):
        if n % divisor == 0:
            liste.append(divisor)
    return liste …
Run Code Online (Sandbox Code Playgroud)

python algorithm performance

6
推荐指数
1
解决办法
414
查看次数

尽可能快地找出 10^12 以内的数字的总约数?

我需要计算数字 N 的除数总数(不关心除数的值是多少),并对所有这些数字 N 在 40-80 次运算内完成。我该怎么做?这不是一个家庭作业问题。我尝试了Pollard 的 Rho算法,但即使这样对于我的目的来说也太慢了。这是我的 python 代码。如果可能的话,我该如何提高其性能?

def is_prime(n):    
    if n < 2:
        return False
    ps = [2,3,5,7,11,13,17,19,23,29,31,37,41,
         43,47,53,59,61,67,71,73,79,83,89,97]
    def is_spsp(n, a):
        d, s = n-1, 0
        while d%2 == 0:
            d /= 2; s += 1
        t = pow(int(a),int(d),int(n))
        if t == 1:
            return True
        while s > 0:
            if t == n-1:
                return True
            t = (t*t) % n
            s -= 1
        return False
    if n in ps: return True
    for p …
Run Code Online (Sandbox Code Playgroud)

python algorithm

5
推荐指数
1
解决办法
4097
查看次数

计算第一个三角数在python中具有超过500个除数

我正在尝试解决Euler项目上的第12个问题。我可以计算出将近4分钟内有500个除数的数字。我怎样才能使其更快?这是尝试;

import time

def main():
    memo={0:0,1:1}
    i=2
    n=200
    while(1):
        if len(getD(getT(i)))>n:
            break
        i+=1
    print(getT(i))

#returns the nth triangle number
def getT(n):
    if not n in memo:
        memo[n]=n+getT(n-1)
    return memo[n]

#returns the list of the divisors
def getD(n):
    divisors=[n]
    for i in xrange(1,int((n/2)+1)):
        if (n/float(i))%1==0:
            divisors.append(i)
    return divisors

startTime=time.time()
main()
print(time.time()-startTime)
Run Code Online (Sandbox Code Playgroud)

python math performance

5
推荐指数
1
解决办法
6027
查看次数

获取给定整数的整个因子对列表的最简单方法是什么?

获取给定整数的整个因子对列表的最简单方法是什么?

例如:f(20)会回来[(1,20), (2,10), (4,5)].

python math

4
推荐指数
1
解决办法
3429
查看次数

高效的python代码,用于打印数字除数的乘积

我正在尝试解决涉及打印给定数量的所有除数的乘积的问题.测试用例的数量是1 <= t <= 300000,数字本身的范围可以从1 <= n <= 500000

我写了下面的代码,但它总是超过2秒的时间限制.有没有办法加快代码?

from math import sqrt

def divisorsProduct(n):
    ProductOfDivisors=1

    for i in range(2,int(round(sqrt(n)))+1):
        if n%i==0: 
            ProductOfDivisors*=i

            if n/i != i:
                ProductOfDivisors*=(n/i)    

    if ProductOfDivisors <= 9999:
        print ProductOfDivisors
    else:
        result = str(ProductOfDivisors)
        print result[len(result)-4:] 

T = int(raw_input())

for i in range(1,T+1):
    num = int(raw_input())
    divisorsProduct(num)
Run Code Online (Sandbox Code Playgroud)

谢谢.

python math

3
推荐指数
1
解决办法
2398
查看次数

标签 统计

python ×5

algorithm ×4

math ×3

performance ×3

primes ×1

pseudocode ×1