C语言 因式分解 50

 我来答
我已经匿名了
2014-09-19 · TA获得超过816个赞
知道小有建树答主
回答量:478
采纳率:0%
帮助的人:247万
展开全部
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
  
  
unsigned int m=2;
unsigned int cnt=1;
  
void Factor(int n, char *msg, char printYes);
int main()
{
    char s[100]={0};
    char flag='y';
    printf("------求整数的因式分解------\n请输入正整数m(>1):");
    scanf("%u", &m);
    printf("打印详细分解情况吗?[y|n,回车打印]");
    scanf("%*c%c",&flag);
    if(m<1)
    {
        printf("error input!\n");
        exit(-1);
    }
    if(flag!='n')
        printf("%d =  %d \n", m,m);
    Factor(m, s,flag);
    if(cnt==1)
        printf("\n%d是素数\n",m);
    printf("\n------");
    printf("一共有%d种", cnt);
    printf("------\n");
    return 0;
}
  
void Factor(int n, char *msg,char printYes)
{
    char s2[100]={0};//保存当前分解的部分结果
    if(n==1)
        return ;
    for(int i=2;i<n;i++)
    {
        if (n%i==0)
        {
            if(n==m)
                sprintf(msg, "%d = ", m);
            sprintf(s2,"%s %d * ",msg, i);//因式分解部分结果保存在字符串s2中
  
            if(printYes!='n')
                printf("%s %d\n",s2,n/i);//打印结果(包括最后一个因子)
            Factor(n/i,s2,printYes);
            cnt++;
        }
    }
}

风若远去何人留
推荐于2017-06-16 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450131
专业C/C++软件开发

向TA提问 私信TA
展开全部
#include <stdio.h>
int first(int n)//函数功能为找到第一个因子。
{
    int r=2;
    while(n%r) r++;
    return r;
}
int main()
{
    int n;
    int a;
    scanf("%d",&n);
    a=first(n);
    printf("%d=%d",n,a);
    n/=a;
    while(n!=1)
    {
        a=first(n);
        printf("*%d", a);
        n/=a;
    }
    printf("\n");
    return 0;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dog0404
2011-11-23 · TA获得超过532个赞
知道小有建树答主
回答量:165
采纳率:100%
帮助的人:230万
展开全部
给你个思路吧,首先,任何数可以表示为:x=p1^N1 × p2^N2 ×……pi^Ni,其中pi 是质数,
因此,你可以如下递归,当然,具体怎么做还是希望你自己实现,自己动手理解更深刻嘛。
//建立一个足够大的质数库
const int MAXP = 31622;
const int PCOUNT = 3401;
int prim[PCOUNT];
int max, numb;
void primes()
{
bool get[MAXP+1];
int i;
for(i = 0;i <= PCOUNT;i++) prim[i] = 0;
for(i = 2;i <= MAXP;i++) get[i] = true;
for(i = 2;i <= MAXP;i++)
if (get[i])
{
int j = i+i;
while(j <= MAXP){get[j] = false;j += i;}
}
for (int ii = 2,j = 0;ii <= MAXP;ii++)
if(get[ii]) prim[++j] = ii;
}

递归函数(当前递归起始质数index,上一级递归数字n)
{
for (int i=index;i<质数库数量;i++)
{
if (x == n*prim(index))//说明找到一种分解
{
print
return;
}
else(x < n*prim(index))//找过了,退回去
{
return;
}
else
{
下一级递归...
}
}
}
有问题欢迎追问,满意请采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天堂鸟clz
2010-08-11 · 超过21用户采纳过TA的回答
知道答主
回答量:39
采纳率:0%
帮助的人:58.4万
展开全部
// 下面是用我在toj 10004上面通过的代码,稍加修改写成的。
#include <stdio.h>
#include <math.h>
int Prime(int x)
{
int n, i;
n = (int)sqrt(x);
for (i = 2; i <= n; i++)
if (x % i == 0) break;
if (i > n)
return 1;
else
return 0;
}
int main()
{
// freopen("2.txt","w",stdout);
int x;
int t;
int i , n;
int y;
int first;
int max;
while (scanf("%d",&max) == 1)
{
for (y = 2; y <= max; y++)
{
x = y;
if (Prime(x))
{
printf("%d=%d\n",x,x);
}
else
{
printf("%d=",x);
first = 1;
do
{
for (i = 2; i <= x; i++)
{
t = 0; n = 0;
while (x % i == 0)
{
t = 1;
n++;
x = x/i;
}
if (t)
{
if (first) first = 0;
else printf("*");
while (n>1)
{
printf("%d*",i);
n--;
}
printf("%d",i);
}
}
} while(x != 1);
printf("\n");
}
}
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2019-06-26
知道答主
回答量:38
采纳率:0%
帮助的人:10.3万
展开全部
#include<stdio.h>	
int main()
{ //因式分解
int n,e=1,i=3;
scanf("%d",&n);
if(n<=1)
{
    printf("Error.\n");
    goto v;
}
printf("%d=",n);
for(;n%2==0;)
{
if(e) printf("%d",2);
else printf("*%d",2);
n/=2;
e=0;
}
for(;n>=2;i+=2)
for(;n%i==0;)
{
if(e) printf("%d",i);
else printf("*%d",i);
n/=i;
e=0;
}
v: 
return 0; 
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式