更快的Prime分解

时间:2014-05-30 18:43:06

标签: factorization

现在这是一个非常基本的问题,我还是想问一下。我想知道如何快速找到数字(< = 10 ^ 12)的素数因子分解。 请帮我。 请不要只是发布代码请解释我只是一个新手(不知道)

3 个答案:

答案 0 :(得分:0)

示例2:147的主要因子分解是什么?

我们可以将147平均分为2吗?

147÷2 =73½

不,不能。答案应该是一个整数,而73½则不是。

让我们尝试下一个素数,3:

147÷3 = 49

这很有效,现在我们尝试分解49,并发现7是最小的素数:

49÷7 = 7

这就是我们需要去的,因为所有因素都是素数。

147 = 3×7×7

(或147 = 3×72使用指数)

 #include<stdio.h>

 int main(){

 int num,i=1,j,k;

 printf("\nEnter a number:");

 scanf("%d",&num);

 while(i<=num){

  k=0;

  if(num%i==0){

     j=1;

      while(j<=i){

        if(i%j==0)

             k++;

         j++;

      }

      if(k==2)

         printf("\n%d is a prime factor",i);
  }

  i++;

  }

 return 0;

}

答案 1 :(得分:0)

对于数字来说,通过试验划分的简单因子分解就足够了:

function factors(n)
    f, fs := 2, []
    while f * f <= n
        while n % f == 0
            n := n / f
            append f to fs
        f := f + 1
    if n == 1 return fs
    append n to fs
    return fs

您需要更强大的算法,因为要考虑的数字越来越大。

答案 2 :(得分:0)

非常简单的程序,

    a=int (input("enter number"))

    i=2
    h=1
    c=a

while(h!=a):
 if(c%i==0):
  print(i)
  h=h*i
  c=c/i
 else:
  i=i+1