求一个数的最大素因子(python实现)

  首先想到的是,将这个数进行素因子分解,得到所有的因子,然后取最大的。

  首先写一个判断一个数是否是素数的方法:

  

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

#judge a number whether a prime

    def
judgePrime(self,number,pme):

        if
number < 2:

            return
False;

        if
number ==
2:

            return
True;

        for
p in
pme:

            if
p ==
2:

                continue;

            Q =
number/p;

            R =
number%p;

            if
R ==
0:

                return
False;

            else:

                if
Q < p:

                    return
True;

                else:

                    continue;

  然后求出所有比这个数的平方根小的素数:

  

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

#get all Prime under a number,include this number

    def
getPrimeUnderNumber(self,number):

        pme =
[];#definite a prime list

        pme.append(2);

        pme.append(3);

        if
number < 5:

            print
‘please input a number above 5‘;

            return;

        i =
5;

        while
i <=
number:

            flag =
self.judgePrime(i,pme);

            if
flag:

                pme.append(i);

                i =
i + 2;

            else:

                i =
i + 2;

        return
pme;

  分解素因子

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

# decomposition factors

    def
getDecompositionFactors(self,number):

        if
math.sqrt(number) < 5:

            primeList =
self.getPrimeUnderNumber(5);

        else:

            primeList =
self.getPrimeUnderNumber(math.sqrt(number));

        if
number ==
2 or
number ==
3:

            return
number;

        i =
0;

        pmeList =
[];

        while
number !=
1:

            p =
number/primeList[i];

            r =
number%primeList[i];

            if
r==0:

                pmeList.append(primeList[i]);

                number =
p;

            else:

                if
p < primeList[i]:

                    pmeList.append(number);

                    return
pmeList;

                else:

                    i =
i + 1;

        return
pmeList;

  最后获得最大素因子

?





1

2

3

4

5

6

7

8

9

10

def getTheLargestPrimeFactorOfNumber(self,number):

        start =
clock();

        pmeList =
self.getDecompositionFactors(number);

        end =
clock();

        print
end-start;

        return
pmeList[len(pmeList)-1];

 算法改进:

求一个数的最大素因子(python实现),码迷,mamicode.com

时间: 2024-08-27 17:11:48

求一个数的最大素因子(python实现)的相关文章

求N个数的最大公约数和最小公倍数

除了分解质因数,还有另一种适用于求几个较小数的最大公约数.最小公倍数的方法 下面是数学证明及算法实现 令[a1,a2,..,an] 表示a1,a2,..,an的最小公倍数,(a1,a2,..,an)表示a1,a2,..,an的最大公约数,其中a1,a2,..,an为非负整数.对于两个数a,b,有[a,b]=ab/(a,b),因此两个数最小公倍数可以用其最大公约数计算.但对于多个数,并没有[a1,a2,..,an]=M/(a1,a2,..,an)成立,M为a1,a2,..,an的乘积.例如:[2,

数学:求一个数的真约数(因数)的个数及所有约数之和

一. 我们知道,每个自然数(不包括0和1)都有2个以上的因数,因数最少的是质数(也叫素数),质数的因数是1和它本身.非质数的自然数也叫合数,它们都含有3个以上(含3个)的因数. 1.怎样求一个数有多少个因数? 对于一个已知的自然数,要求出它有多少个因数,可用下列方法: 首先将这个已知数分解质因数,将此数化成几个质数幂的连乘形式,然后把这些质数的指数分别加一,再相乘,求出来的积就是我们要的结果. 例如:求360有多少个因数. 因为360分解质因数可表示为:360=2^3×3^2×5,2.3.5的指

写一个方法,求两个数的最大公约数和最小公倍数。

package homework0702; /* * 最大公约数 利用辗转相除法求解两个正整数的最大公约数 在循环中,只要除数不等于0,用较大的数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环较小的数,如此循环直到较小的数值为0,返回较大的数.即为最大公约数. 辗转相除法(欧几里得算法) 定理:两个整数的最大公约数等于其中较小的那个数和两数的相除余数的最大公约数.最大公约数(greatest common divisor)缩写为gcd. 最小公倍数 最小公倍数 = (a

求两个数的最大公约数

求两个数的最大公约数 问题:给定两个正整数a和b,求他们的最大公约数. 最简单的方法就是穷举法,如果a>b,那么依次计算1~b的所有整数是否是a和b的公约数. public static void main(String[] args) { long timer = System.currentTimeMillis(); System.out.println(getGCB(1000234234,1242342390)); System.out.println(System.currentTime

求两个数的最大公约数和最小公倍数

import java.util.Scanner; //求两个数的最大公约数,最小共倍数. public class CommonMaxDivisor { public static void main(String[] args){ Scanner scanner=new Scanner(System.in); int m=scanner.nextInt(); int n=scanner.nextInt(); scanner.close(); CommonMaxDivisor cmd=new

【C语言】求多个数中的最大值(可变参数列表)

求多个数中的最大值要求用可变参数列表: 代码如下: <span style="font-size:18px;">#include<stdio.h> #include<stdarg.h> int Max(int n,...) { int i=0; int max=0; va_list arg; va_start(arg,n); for(i=0;i<n;i++) { int val=va_arg(arg,int); if (val>max)

算法 - 求n个数的中位数(C++)

placeholder算法 - 求n个数的中位数(C++),布布扣,bubuko.com

求两个数之间的随机正整数

求两个数之间的随机正整 数.并添到新数组,数组长度由自己指定.并且数组中不能有重复的值 function getRandomInt (min, max) { return Math.floor(Math.random() * (max - min + 1) + min) } function numInt(n, min, max) { const arr = [] while(arr.length < n) { let num = getRandomInt(min, max) if (arr.i

求两个数的最大公约数和最小公倍数 C语言

C程序设计第八章的第一道题目,求两个数的最大公约数和最小公倍数.需要注意一下几点: 1.最大公约数和最小公倍数间的关系: 设两个数是a,b最大公约数是p,最小公倍数是q 那么有这样的关系:ab=pq 所以q=ab/p.2.任意整数和0的公约数是该整数的所有约数,所以它们的最大公约数为该整数本身.3.碾转相除法:被除数%除数=余数,如果余数不为0,就让原来的除数做为被除数,余数作为除数,再进行运算 被除数%除数=余数,直到得到的余数为0为止,此时的除数就是最大公约数. #include <stdi