面试题:求质因数分解

题目:求一个数的质因数分解,比如输入90,输出2*3*3*5
#include <iostream>
using namespace std;

void Decomposition(int nNum)
{
	for(int i=2;i<nNum;)
	{
		if(nNum % i == 0)
		{
			nNum = nNum /i;
			cout<<i<<",";
		}
		else
		{
			i++;
		}
	}
	if(1<nNum)
		cout<<nNum<<endl;
}

int  main()
{
	Decomposition(9999);
	getchar();
}

 

扩充知识:

a和b是两个连续的自然数,它们的最大公约数是 1,最小公倍数是 ab
分析:由于相邻的两个自然数互为质数,故他们的最大公约数是1,最小公倍数是ab,从而易求答案.
解答:解:a、b为两个相邻的自然数,它们的最大公约数为1,所以a、b的最小公倍数为ab.
故答案为1;ab.
点评:此题考查了求两个数的最大公因数和最小公倍数的方法和相邻两个自然数互为质数的知识点,由此可以解决.

 

质数的无穷性的证明

  质数的个数是无穷的。最经典的证明欧几里得证得,在他的《几何原本》中就有记载。它使用了现在证明常用的方法:反证法。具体的证明如下:

  ●假设质数只有有限的n个,从小到大依次排列为p1,p2,……,pn,设 N = p1 × p2 × …… × pn,那么,N+1是素数或者不是素数。

  ●如果N+1为素数,则N+1要大于p1,p2,……,pn,所以它不在那些假设的素数集合中。

  ●如果N+1为合数,因为任何一个合数都可以分解为几个素数的积;而N和N+1的最大公约数是1,所以N+1不可能被p1,p2,……,pn整除,所以该合数分解得到的素因数肯定不在假设的素数集合中。

  ●因此无论该数是素数还是合数,都意味着在假设的有限个素数之外还存在着其他素数。

  ●对任何有限个素数的集合来说,用上述的方法永远可以得到有一个素数不在假设的素数集合中的结论。

  ●所以原先的假设不成立。也就是说,素数有无穷多个。


posted @ 2012-11-09 10:54  byfei  阅读(214)  评论(0编辑  收藏  举报