【发布时间】:2014-05-30 18:43:06
【问题描述】:
现在这是一个非常基本的问题,我仍然想问它。我想知道如何快速找到一个数字(
【问题讨论】:
-
谷歌“素数分解算法”
标签: factorization
现在这是一个非常基本的问题,我仍然想问它。我想知道如何快速找到一个数字(
【问题讨论】:
标签: factorization
示例 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;
}
【讨论】:
对于较小的数字,通过试除法进行简单的因式分解就足够了:
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
随着被分解的数字越来越大,您将需要更强大的算法。
【讨论】:
非常简单的程序,
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
【讨论】: