当前位置首页 > 百科资料> 正文

分解质因数

2022-07-04 16:03:47 百科资料

任何一个合数都可以写成几个质数相乘的形式。其中每个质数都是这个合数的因数,叫做这个合数的分解质因数。分解质因数只针对合数。

  • 中文名 分解质因数
  • 外文名 Decomposition of the quality factor
  • 释义 求质因数的过程叫做分解质因数

原理方法

  举个简单例子:12的分解质因数,可以有以下几种12=2x2x3=4x3=1x12=2x6其中1,2,3,4,6,12都可以说是12的因数,即相乘的几个数等于一个自然数,那么这几个数就是这个自然数的因数。2、3、4中2和3是质数,就是质因数,4不是质数。那么什么是质数呢,就是不能再拆分为除了1和它本身之外的因数的数。如2、3、5、7、11、13、17、19、23、29等等质数,没有什么特定的规律、不存在最大的质数。

分解质因数

  用短除法如右图用短除法可以快速进行分解质因数分解过程用质数还能快速求出最大公因数和最小公倍数。你学会了吗快来试一试吧。

  什么是质因数

  质数就是除去他自己和1不能被其他的数整除。 合数与质数恰恰相反。 如果两个数只有公约数1那么这两个数就是互质数。 把一个合数用质因数相乘的形式表示出来叫做分解质因数。两个数相乘这两个数就是它们的积的因数一个数能够被另一数整除这个数就是另一数的倍数。

分解质因数

相关示例

  求一个数分解质因数要从最小的质数除起一直除到结果为质数为止。分解质因数的算式的叫短除法和除法的性质差不多还可以用来求多个个数的公因式

  如24

  2┖24是短除法的符号

  2┖12

  2┖6

  3——3是质数结束

  得出24=2×2×2×3=2^3×3m^n=m的n次方

  再如105

  3┖105

  5┖35

  ----7——7是质数结束

  得出105=3×5×7

  证明不存在最大的质数

  使用反证法

  假设存在最大的质数为N则所有的质数序列为N1N2N3……N

  设M=N1×N2×N3×N4×……N+1

  可以证明M不能被任何质数整除得出M是也是一个质数。

  而M>N与假设矛盾故可证明不存在最大的质数。

相关分解

Pollard Rho快速因数分解

  1975年John M. Pollard提出了第二种因数分解的方法。该算法时间复杂度为On^1/4。详见参考资料[1-2]。

编程分解质因数

  pascal语言

  program dsq;

  var

  n,i:longint;

  begin

  readln(n);

  write(n,'=1');

  i:=2;

  while i<=n do begin

  while n mod i = 0 do begin

  write('*',i);

  n:=n div i;

  end;

  inc(i);

  end;

  end.

  Visual Basic语言

  Dim x,a,b,k As String

  Private Sub Command1_Click()

  a = Val(Text1.Text)

  x = 2

  If a <= 1 Or a > Int(a) Then

  If a = 1 Then

  Text2.Text = "它既不是质数也不是合数"

  Else

  MsgBox "请您先输入数据",vbOKOnly + vbInformation,"友情提示"

  End If

  Else

  Do While a / 2 = Int(a / 2 And a >= 4

  If b = 0 Then

  Text2.Text = Text2.Text & "2"

  b = 1

  Else

  Text2.Text = Text2.Text & "*2"

  End If

  a = a / 2

  k = a

  Loop

  Do While a > 1

  For x = 3 To Sqr(a) Step 2

  Do While a / x = Int(a / x) And a >= x * x

  If b = 0 Then

  Text2.Text = Text2.Text & x

  b = 1

  Else

  Text2.Text = Text2.Text & "*" & x

  End If

  a = a / x

  Loop

  Next

  k = a

  a = 1

  Loop

  If b = 1 Then

  Text2.Text = Text2.Text & "*" & k

  Else

  Text2.Text = "这是一个质数"

  End If

  End If

  End Sub

  Private Sub Command2_Click()

  Text1.Text = ""

  Text2.Text = ""

  End Sub

  ============================================================

  c语言分解质因数算法

  #include<stdio.h>

  #include<math.h>

  int main() {

  int i,b;

  long long in; /*采用64位整型以便输入更大的数*/

  freopen("F://1.txt","r",stdin);

  freopen("F://2.txt","w",stdout);

  while(scanf("%lld",&in)!=EOF) { /*在F://1.txt中输入x个数NN>=2以换行符或空格符隔开当没有输入时循环会自动结束*/

  b=0; /*用于标记是否是第一个质因数第一个质因数在输出时前面不需要加空格*/

  for(i=2;in!=1;i++)

  if(in%i==0) {

  in/=i;

  b?printf(" %d",i):printf("%d",i),b=1;

  i--; /*i--和i++使得i的值不变即能把N含有的所有的当前质因数除尽例如24会一直把2除尽再去除3*/

  }

  printf("n");

  }

  return 0;

  }

  批处理分解质因数脚本

  @echo off

  color 1e

  start

  cls

  title 分解质因数程序

  set /p num=请输入待分解的数

  set num0=%num%

  if %num% EQU 1 cls&echo 1既不是素数也不是非素数不能分解&pause >nul&goto start

  if %num% EQU 2 cls&echo 2是素数不能分解&pause >nul&goto start

  if %num% EQU 3 cls&echo 3是素数不能分解&pause >nul&goto start

  set numx=

  loop_1

  if %num% EQU 1 goto result

  set count=3

  set /a mod=num%%2

  if %mod% EQU 0 (

  set numx=%numx%×2

  set /a num=num/2

  goto loop_1

  loop_2

  set /a mod=num%%count

  if %mod% EQU 0 (

  set numx=%numx%×%count%

  set /a num=num/count

  if %num% EQU 1 goto result

  if %count% EQU %num% set numx=%numx%×%count%&goto result

  cls

  set /a stop=%count%*%count%

  if %stop% GTR %num% set numx=%numx%×%num%&goto result

  set /a count+=2

  echo 正在计算......

  echo %num0%=%numx:~2%

  set /a wc=stop*100/num

  echo 正在计算%num%的因数

  echo 已完成计算%wc%%%

  if %mod% EQU 0 goto loop_1

  goto loop_2

  result

  cls

  set numx=%numx:~2%

  if %num0% EQU %numx% echo %num0%是素数不能分解&pause >nul&goto start

  echo %num0%=%numx%

  pause >nul

  goto start

  C++语言的分解程序

  #include "stdafx.h"

  #include <iostream>

  using namespace std;

  int main()

  {

  int n;

  printf("请输入一个大于0的整数:");

  cin >> n;

  printf("分解结果:");

  for (int i =2; i <= n; i++)

  {

  while (n>=i)

  {

  if(n%i==0)

  {

  if (n == i)

  {

  printf("%d", i);

  n = n / i;

  }

  else

  {

  printf("%d*", i);

  n = n / i;

  }

  }

  else

  {

  break;

  }

  }

  }

  return 0;

  }

  VS2015 上成功运行   编者:钱芃达  编于:2017年3月4日

  Common Lisp实现分解质因数

  defun is-prime-number (number)

  let ((num number))

  (do ((index 2 1+ index)))

  ((>= index num) t)

  (if (= 0 (mod num index))

  return-from is-prime-number nil)))))

  defun decomposition-quality-factor (number)

  let ((num number) (prime-list (make-array 10 :fill-pointer 0 :adjustable t)))

  if (is-prime-number num)

  progn

  format t "~a~%" num)

  return-from decomposition-quality-factor nil)))

  do ((index 2 1+ index)))

  ((>= index num) nil)

  (if (is-prime-number index)

  push index prime-list)))

  dolist (value prime-list)

  let ((test-flag nil))

  (do ()

  test-flag nil)

  if (= 0 (mod num value))

  progn

  format t "~a~%" value)

  setf num (/ num value))

  if (is-prime-number num)

  progn

  format t "~a~%" num)

  return-from decomposition-quality-factor nil))))

  setf test-flag t)))))))

声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:baisebaisebaise@yeah.net