【问题标题】:Faster Prime factorization更快的素数分解
【发布时间】:2014-05-30 18:43:06
【问题描述】:

现在这是一个非常基本的问题,我仍然想问它。我想知道如何快速找到一个数字(

【问题讨论】:

  • 谷歌“素数分解算法”

标签: factorization


【解决方案1】:

示例 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;

}

【讨论】:

    【解决方案2】:

    对于较小的数字,通过试除法进行简单的因式分解就足够了:

    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
    

    随着被分解的数字越来越大,您将需要更强大的算法。

    【讨论】:

      【解决方案3】:

      非常简单的程序,

          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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-11
        • 1970-01-01
        • 2012-05-20
        相关资源
        最近更新 更多