Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2501254
  • 博文数量: 308
  • 博客积分: 5547
  • 博客等级: 大校
  • 技术积分: 3782
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-24 09:47
个人简介

hello world.

文章分类

全部博文(308)

分类: C/C++

2011-04-08 09:03:01

    根据数论的知识可知任何一个合数都可以分解写成几个质数相乘的形式,编写程序对一个数进行分解质因数。
    我们知道一个合数n,可以在2~n-1之间找到两个因数i,j使i*j=n;如果i是质数,则i一定是n的一个质因数,否则继续对i进行分解质因数;同理,如果j是质数,则j一定是n的一个质因数,否则继续对j进行分解质因数。因此是个递归的过程,根据上述思想,编写代码如下:
  1. #include <stdio.h>

  2. int isPrime(int n)
  3. {
  4.   int i;
  5.   for(i=2; i<n;i++)
  6.     if(n % i == 0)
  7.       return 0;
  8.   return 1;
  9. }

  10. void PrimeFactor(int n)
  11. {
  12.   int i;
  13.   if(isPrime(n))
  14.     printf("%d ",n);
  15.   else
  16.   {
  17.     for(i=2; i<n; i++)
  18.       if(n % i == 0)
  19.       {
  20.         printf("%d ",i);
  21.         if(isPrime(n/i))
  22.         {
  23.           printf("%d ",n/i);
  24.         }
  25.         else
  26.         {
  27.           PrimeFactor(n/i);
  28.         }
  29.         break;
  30.       }
  31.   }
  32. }

  33. int main(int argc, char *argv[])
  34. {
  35.   int n;
  36.   printf("please input a integer for getting prime factor\n");
  37.   scanf("%d",&n);
  38.   PrimeFactor(n);
  39.   printf("\n");
  40.   
  41.   return 0;
  42. }
程序执行结果:
please input a integer for getting prime factor
1000
2 2 2 5 5 5

阅读(2639) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chengxiaopeng2011-04-11 08:35:06

linyunxian: 呵呵,子过程还可以继续优化。
既然任何合数都可以分解成质数,那么数n只需要对[2... sqrt(n] 之间的质数求模即可判断了。.....
谢谢,我再好好回想一下您的思路,把程序再修改一下。

linyunxian2011-04-09 21:12:37

呵呵,子过程还可以继续优化。
既然任何合数都可以分解成质数,那么数n只需要对[2... sqrt(n] 之间的质数求模即可判断了。