首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么素数的代码不适用于数字10?

为什么素数的代码不适用于数字10?
EN

Stack Overflow用户
提问于 2022-03-18 21:37:15
回答 2查看 82关注 0票数 0

我正试图用python编写一个代码来查找一个数字的所有素数。我的问题是,这一行代码不能返回质数10,列表只返回2。现在,我从这个页面https://www.geeksforgeeks.org/prime-factor/修改了这段代码,因为我想把我的因素作为一个列表。

来自该网站的代码适用于数字10,但是当我运行自己稍微修改过的版本时,我不明白为什么它不适用于数字10。

我在范围函数的末尾尝试了+10,而不是+1,这确实解决了这个问题,但是我仍然不确定为什么我一开始就有一个问题。第二,+10是否适用于所有没有错误的数字?从理论上讲,这应该是因为我应该只有n的平方根的因子,但我不确定。最后,如果+10确实有效,难道这不会使代码在不需要的循环中迭代时运行得更慢吗?

这是我用的代码。

代码语言:javascript
复制
import math

def primefact():
    n = int(input('What is your number?:'))
    prime_factors = []
    while n % 2 == 0: # Checks if number is divisible by 2
        prime_factors.append(2) #repeats it until n is no longer divisible by 2
        n = n / 2 
    for i in range(3, int(math.sqrt(n)) + 1, 2): # Testing for odd factors
        while n % i == 0: 
            prime_factors.append(i)
            n = n / i
    print(prime_factors)
    return 

primefact()
EN

回答 2

Stack Overflow用户

发布于 2022-04-16 01:54:50

下面是我写的一段代码:

代码语言:javascript
复制
from numpy import mod, int0, sqrt, add, multiply, subtract, greater, equal, less, not_equal, floor_divide
class findFactors:
def __init__(self, n):
    self.primeFactorize(n)
    
def primeFactorize(self, n):
    factors = self.findFactors(n)
    self.factors = factors
    primeFactors = []
    xprimeFactors = []
    for factor in factors:
        if prime(factor).isPrime:
            primeFactors.append(factor)
    ntf = n
    nprime = 0
    while not_equal(ntf, 1):
        while equal(mod(ntf, primeFactors[nprime]), 0):
            ntf = floor_divide(ntf, primeFactors[nprime])
            xprimeFactors.append(primeFactors[nprime])
        nprime = add(nprime, 1)
    self.primeFactors = primeFactors
    self.extendedPrimeFactors = xprimeFactors

def findFactors(self, number):
    if prime(number).isPrime: return [1, number]
    factors = []
    s = int0(sqrt(float(number)))
    for v in range(1, add(s, 1)):
        if equal(mod(number, v), 0):
            factors.append(int(v))
            factors.append(int(floor_divide(number, v)))
    factors.sort()
    return factors

class prime:
def __init__(self, n):
    self.isPrime = self.verify(n)

def verify(self, n):
    if less(n, 2):
        return False
    if less(n, 4):
        return True
    if not n & 1 or equal(mod(n, 3), 0):
        return False
    s = int0(sqrt(float(n)))
    for k in range(1, add(s, 1)):
        mul = multiply(6, k)
        p = add(mul, 1)
        m = subtract(mul, 1)
        if greater(m, s):
            return True
        if equal(mod(n, p), 0) or equal(mod(n, m), 0):
            return False

想象func = findFactors(n)

func.factors将返回一个包含数字n的所有因素的列表,

func.extendedPrimeFactors将返回一个包含数的素因式分解的列表,

func.primeFactors将返回一个列表,其中素数只出现一次,而不是x次

另外,下面有一个非常快的质数检查器。(素数检查器的用法: prime(n).isPrime )

票数 1
EN

Stack Overflow用户

发布于 2022-03-18 22:06:33

嗨,你刚刚忘了方程式的最后一部分

N是素数的条件

代码语言:javascript
复制
# number greater than 2
if n > 2:
    print n

以下是所有阶乘素数的列表,与素数https://en.m.wikipedia.org/wiki/Table_of_prime_factors不相同

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71533423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档