永发信息网

用程序实现分解质因数

答案:3  悬赏:70  手机版
解决时间 2021-08-11 05:03
求算法 时间复杂度要低一点
最佳答案

你所说的数是多大以内的,假设是m,那么你先用筛选法选出 m以下的素数,然后用最小的开始除原来的数并输出每次的除数,每当不能整除时,素数的计数器加1,当数组内元素大于被除数时,则结束循环,被除数为最后一个因子


int s[100]  //假设这个是存放m以下素数的数组


for(i=0; ;i++)
{
 if(s[i]>m)
 {
  cout<<m<<endl;
  break;
 }
 while(m%s[i]==0)
 {
  m%=s[i];
  cout<<s[i]<<" ";
 }
}大致是这样,输出格式之类的根据需求自己控制下吧,在分解前用筛选法先准备好素数对提高效率是很多的

全部回答
#include<stdio.h>   #include<math.h>   int main() {   int i,b;   long long in;   freopen("F://1.txt","r",stdin);   freopen("F://2.txt","w",stdout);   while(scanf("%lld",&in)!=EOF) {   b=0;   for(i=2;in!=1;i++)   if(in%i==0) {   in/=i;   b?printf(" %d",i):printf("%d",i),b=1;   i--;   }   printf("\n");   }   return 0;   }
#include   <stdio.h> #include   <stdlib.h> #include   <math.h> void   pr(long   p,   int   i); int   main() {     int     i;     long   x,   x2,   p;     char   s[512];     for   (;;)   {         printf( "\n>   ");         gets(s);         x   =   atol(s);         pr(x,   0);         if   (x   <   2)   break;         p   =   2;         for   (i   =   0;   (x   %   p)   ==   0;   i++)             x   /=   p;         if   (i   >   0)   pr(p,   i);         if   (x   ==   1)   continue;         x2   =   (long)sqrt((double)x);         for   (p   =   3;   p   <=   x2;   p   +=   2)   {             for   (i   =   0;   (x   %   p)   ==   0;   i++)                 x   /=   p;             if   (i   >   0)   pr(p,   i);             x2   =   (long)sqrt((double)x);         }         if   (x   >   1)   pr(x,   1);     }     return   0; } void   pr(long   p,   int   i) {     static   char   c   =   '= ';     if   (i   ==   0)   {         printf( "#   %ld ",   p);         c   =   '= ';     }     else   {         printf( "   %c   %ld ",   c,   p);         if   (i   >   1)   printf( "^%d ",   i);         c   =   '* ';     } } 运行结果如下: >   123456 #   123456   =   2^6   *   3   *   643 >   1234567890 #   1234567890   =   2   *   3^2   *   5   *   3607   *   3803
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
九阴真经什么时候公测,知道的告诉下,最好资
东宁县牡丹江粟氏天府东宁分店这个地址在什么
首派a60怎么样
成人专升本后还需读书吗?
电脑IE首页不饿恶意篡改咋办
关于PS。高人进。
一起来看流星雨中你最想与那位合作?
为什么我的QQ上没有显示钱包呢
陕西省2010年助学贷款授权委托书下载
谁能给我永恒之家的挂
我脖子上长了个猴子好几年了,最近发见他长了
求过圣安地列斯任务
辉县市新乡创维电视售后服务中心在哪里啊,我
哪个可以替换NVIDIA GeForce 9100M g
盐城哪里有DIY情侣变色杯卖?j价格是 多少?
推荐资讯
湘阴县岳阳老茶亭中西医诊所地址在什么地方,
是高手请进来
字谜@ 横刀冲前高声:“先*拿*命*来!”(八笔
请问现在这么热的天气如果用红枣和枸杞子泡水
天龙体力修炼点满3重要多少经验,多少钱
思路英雄里面怎样快速增加资源
脸毛很长怎么办
世上果真有阴阳眼一说?
狮子座的人生观是怎样的?
我在邮局办的存取卡如果用卡去交行的存款机上
DNF死灵暴君在PK场召唤了之后维持几秒
鲁大师检测显卡那些制造日期有问题?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?