Chinaunix首页 | 论坛 | 博客
  • 博客访问: 238434
  • 博文数量: 62
  • 博客积分: 973
  • 博客等级: 准尉
  • 技术积分: 530
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-16 23:25
文章分类

全部博文(62)

文章存档

2013年(1)

2012年(14)

2011年(47)

分类: C/C++

2011-12-01 17:52:46

问题:2805 = 17*11*5*3
 
int main(void)
{
    int a, n=100;
    printf("pls input the number:\n");
    scanf("%d", &n);
    for(a = 2; a < n; ++a)
    {
        if(n%a == 0)
        {
            n /= a;
            printf("%d * ", a);
            a = 1;
        }
    }
    printf("%d\n", a);
    return 0;
}
 
====================================
 
算法:i从2开始到sqrt(n)的每一个i去试除n,
      能整除的时候就说明找到了一个新的因子,
      因为是从较小的数开始除起所以必定会先找到能整除的最小的素数。
参考:blog.csdn.net/xinghongduo/article/details/5809607
      blog.csdn.net/cherylnatsu/article/details/6423465
  1. #include <stdio.h>

  2. // n从2开始
  3. void primfactor(long m, int n)
  4. {
  5.     while(m%n!=0) n++; // 能整除
  6.     m /= n;
  7.     if(m>=n)
  8.         primfactor(m,n);
  9.     printf("%d*",n);
  10. }

  11. //非递归算法
  12. void primediv(int num )
  13. {
  14.     int i;
  15.     // i<= sqrt(num)
  16.     for(i=2; i*i <= num; ++i)
  17.     {
  18.         if(num%i == 0)
  19.         {
  20.             num /= i;
  21.             printf("%d*", i);
  22.             --i; // same factor
  23.         }
  24.     }
  25.     printf("%d\n", i);
  26. }

  27. main()
  28. {
  29. // 435234=251*17*17*3*2
  30. // 300=5*5*3*2*2
  31.     long n=435234;
  32.     printf("%ld=",n);
  33.     primfactor(n,2);
  34.     printf("\n");
  35.     // another
  36.     printf("%ld=",n);
  37.     primediv(n);
  38. }
阅读(1599) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~