鱼C论坛

 找回密码
 立即注册
查看: 4785|回复: 9

我写分解质因数是.........

[复制链接]
发表于 2013-6-22 15:00:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include<stdio.h>
  2. #include<malloc.h>


  3. bool susu(int i)
  4. {
  5.         int j, k;
  6.         k = 0;
  7.         for(j = 2;j<i;++j)
  8.         {
  9.                 if(i % j ==0)
  10.                 {
  11.                         k++;
  12.                 }
  13.         }
  14.         if(k == 0)
  15.         {
  16.                 return true;
  17.         }
  18.         else
  19.         {
  20.                 return false;
  21.         }
  22. }
  23. void main()
  24. {
  25. star1:printf("请输入一个要分解的数:");
  26.           int j, k;
  27.           long int i;
  28.           scanf("%d",&i);
  29.           if(i < 0)
  30.           {
  31.                   printf("请不要输入一个非正整数,请重新输入一个正整数!\n");
  32.                   goto star1;
  33.           }
  34.           else
  35.           {
  36.                   j = 0;
  37.                   int rl = 4;
  38.                   int *zys = (int*)malloc(4);
  39. star2: for(zys[j] = 2;zys[j]<=i;++zys[j])
  40.            {
  41.                    if(i % zys[j] == 0)
  42.                    {
  43.                            k = i / zys[j];
  44.                            if(susu(k))
  45.                            {
  46.                                    printf("%d = ",i);
  47.                                    for(i=0;i<=j;++i)
  48.                                    {
  49.                                            printf("%d ",zys[i]);
  50.                                            if(i == j)
  51.                                            {
  52.                                                    if(k == 1);
  53.                                                    else
  54.                                                    {
  55.                                                            printf("X %d\n",k);
  56.                                                    }
  57.                                            }
  58.                                            else
  59.                                            {
  60.                                                    printf("X ");
  61.                                            }
  62.                                    }
  63.                            }
  64.                            else
  65.                            {
  66.                                    rl += 4;
  67.                                    j++;
  68.                                    i = k;
  69.                                    realloc(zys,rl);
  70.                                    goto star2;
  71.                            }
  72.                    }
  73.            }
  74.        goto star1;
  75.           }
  76.           
  77. }



复制代码
貌似大于10就会 》。。。。sorry 没测试清楚就来提问
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-22 15:17:11 | 显示全部楼层
有点看不懂,看来我应该更加努力!!!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-22 15:30:45 | 显示全部楼层
你这算法怎么那么复杂啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-1 22:30:03 | 显示全部楼层
怎么没人鸟我啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-2 10:15:31 | 显示全部楼层
int *zys = (int*)malloc(4);
这里只分配了4个字节智能够刚好容纳一个整数,你下面居然使用zys[j],不用看都知道肯定数组越界
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-2 10:15:58 | 显示全部楼层
  1. //分解质因数
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<cmath>
  5. using namespace std;


  6. const int MAXN = 2001000;
  7. const int PSIZE = 100000;
  8. int plist[PSIZE], pcount=0;

  9. //先调用initprime()
  10. void initprime();
  11. //prime_factor()传入n, 返回不同质因数的个数
  12. //f存放质因数,nf存放对应质因数的个数
  13. int prime_factor(int n, int* f, int *nf);
  14. //打印结果
  15. void print_result(int n, int* f, int *nf);

  16. int main () {
  17.         initprime();
  18.         int input_data = -1;
  19.         int result[500];
  20.         int result_cnt[500];
  21.         while( cin>>input_data ) {
  22.                 int numbers = prime_factor( input_data, result, result_cnt );
  23.                 print_result( numbers, result, result_cnt );
  24.         }
  25. }



  26. int prime(int n){
  27.         int i;
  28.         if ((n!=2&&!(n%2))||(n!=3&&!(n%3))||(n!=5&&!(n%5))||(n!=7&&!(n%7)))
  29.                 return 0;
  30.         for (i=0;plist[i]*plist[i]<=n;++i)
  31.                 if (!(n%plist[i]))
  32.                         return 0;
  33.         return n>1;
  34. }
  35. void initprime(){
  36.         int i;
  37.         for (plist[pcount++]=2,i=3;i<100000;++i)
  38.                 if (prime(i))
  39.                         plist[pcount++]=i;
  40. }
  41. int prime_factor(int n, int* f, int *nf) {
  42.         int cnt = 0;
  43.         int n2 = sqrt((double)n);
  44.         for(int i = 0; n > 1 && plist[i] <= n2; ++i)
  45.                 if (n % plist[i] == 0) {                       
  46.                         for (nf[cnt] = 0; n % plist[i] == 0; ++nf[cnt], n /= plist[i]);
  47.                         f[cnt++] = plist[i];
  48.                 }
  49.         if (n > 1) nf[cnt] = 1, f[cnt++] = n;
  50.         return cnt;
  51. }

  52. void print_result(int n, int* f, int *nf) {
  53.         for( int i=0;i<n;++i ) {
  54.                 if(i!=0) cout<<"*";
  55.                 cout<<f[i];
  56.                 for( int j = nf[i]-1; j!=0; --j ) {
  57.                         cout<<"*"<<f[i];
  58.                 }
  59.         }
  60.         cout<<endl;
  61. }
复制代码
给你个代码参考
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-14 11:29:51 | 显示全部楼层

对啊   我给忘了  (*^__^*) 嘻嘻……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-14 11:30:45 | 显示全部楼层
仰望天上的光 发表于 2013-7-2 10:15
给你个代码参考

楼主你用C++写的  我目前的C++水平........
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-14 11:35:23 | 显示全部楼层
牡丹花下死做鬼 发表于 2013-7-14 11:30
楼主你用C++写的  我目前的C++水平........

我好想像就用到了C++里的cout吧,看不惯自己把它替换成printf就是了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-16 08:05:12 | 显示全部楼层
有点看不懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-22 10:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表