【401】Python 求合数的所有质数因子

对于这样的一个题目来说,出看来,可能会想到判断是否为质数,但其实并不需要。

只要按照从2开始遍历,只要遇到可以整除的就是想要的质数,理由是,如果遇到合数的话,那么在此之前一定会遇到这个合数的质因子,因此不会存在这种情况。

另外就是遍历的后边界,其实随着number的质因子被找到,因此number在逐渐减小,因此之后的遍历中是包括其自身的,因此需要 number+1

代码1:这样的方法尤其适用于大数字,否则会有很多无用的计算

def all_divisors(number):
    nb_list = []
    while number != 1:
        for i in range(2, number+1):
            if number%i == 0:
                nb_list.append(i)
                number = number//i
                break    

    return nb_list

print(all_dvisiors(52399401037149926144))

output:

[2, 2, 2, 2, 2, 2, 2, 2, 7, 7, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11]

代码2:

def all_divisors(number):
    nb_list = []
    i = 2
    while i <= number:
        if number%i == 0:
            nb_list.append(i)
            number //= i
            i = 2
            continue
        i += 1
    return nb_list

原文地址:https://www.cnblogs.com/alex-bn-lee/p/10808377.html

时间: 2024-10-12 02:26:43

【401】Python 求合数的所有质数因子的相关文章

python ---求100以内的质数有哪些

#coding=utf8 #求100以内的质数有哪些 #质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数 #for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行,while - else 也是一样. list = [] def f(n): for i in range(2,101): #如果for循环中存在一个满足这个条件,直接break跳出for循环,不执行else #如果for循环中没有一个满足该条

利用数组求前n个质数

我的算法思想和实现方式都在代码和注释当中呢,这样的方式确实使算法复杂度降低一个等级,很好啊. #include <stdio.h> #include <time.h> /** * 利用数组求前n个质数 * 确定一个数m是否为质数,可以用已求出的质数对m * 的整除性来确定 */ //如果不知道质数的特性和想不到优化思路的方法 void getNPrimes_normal(); //优化之后的方法 void getNPrimes_optimize(); int main(void)

分解质数因子

var m,b,c=0,j=0; var arr=[]; function fjzys(k){ var i = 2; while(k>=i) { if (k%i == 0) { arr[j] = i; k/=i; i=2; j++; } else { i++; } } } fjzys(100); //求100的质数因子 for(var b = 0; b<(j-1); b++) { console.log(arr[b]); console.log('*'); } console.log(arr[

欧拉项目第三题之最大质数因子

13195的质数因子有5,7,13和29. 600851475143的最大质数因子是多少? 这里可以肯定的是:1.数字很大,绝对不能暴力.2.如果这是一到OJ题,那么我们的目的就是尽量缩小这个数,减少计算量. 我们都知道,任何一个合数都是可以由他的所有质因素相乘得到的,比如15=3*3*3*3*3,12=2*2*3,60=2*2*3*5.(这些数都是我随便想的),好的,我们先看一个比较小的数60,现在我们要找它的最大质因子,我们可以从最小的奇数开始枚举(当然要先枚举2这个特殊的质数,除此之外的偶

求100以内的质数

求100以内的质数. 1 num = [2] 2 i = 3 3 while i < 101: 4 j = 2 5 while j < i: 6 if i % j == 0: 7 break 8 else: 9 j = j + 1 10 continue 11 else: 12 num.append(i) 13 i = i + 1 14 print(num)

质数因子

题目描述 功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 ) 详细描述: 函数接口说明: public String getResult(long ulDataInput) 输入参数: long ulDataInput:输入的正整数 返回值: String 输入描述: 输入一个long型整数 输出描述: 按照从小到大的顺序输出它的所有质数的因子,以空格隔开 输入例子: 180 输出例子: 2 2 3 3 5 import java.util

python求微分方程组的数值解曲线01

本人最近在写一篇关于神经网络同步的文章,其一部分模型为: x_i^{\Delta}(t)= -a_i*x_i(t)+ b_i* f(x_i(t))+ \sum\limits_{j \in\{i-1, i+1\}}c_{ij}f(x_j(t-\tau_{ij})), t\in\mathbb{R} (1.1) y_i^{\Delta}(t)= -a_i*y_i(t)+ b_i* f(y_i(t))+ \sum\limits_{j \in\{i-1, i+1\}}c_{ij}f(y_j(t-\tau_

python求crc32值的方法

python求crc32值的方法 在python代码中求CRC值,要import binasciibinascii.crc32(v) 求出了v的crc32值,这是一个long型,形如-1456387L,把这个值&0xffffffff得到的值形如48a213L的形式.然后,把这个值用16进制表示出来.www.jbxue.com例子: def _crc32(self, v): """ Generates the crc32 hash of the v. @return:

python 求10亿以内和987654互质正整数的和

加群看见的 但是计算好慢,谁有更优的算法,麻烦说一下. ? 1 2 3 4 5 6 7 8 9 10 factor=[] for x in xrange(1, 987654//2+1):     if 987654%x==0:         factor.append(x) sum=0 for y in xrange(1, 1000000000):     for z in factor:         if y%z == 0:             sum+=y print sum 51