| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3300 人关注过本帖, 1 人收藏
标题:关于因式分解程序的问题,希望大家能帮帮忙。
只看楼主 加入收藏
zxd675816777
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:252
专家分:631
注 册:2012-2-3
结帖率:80%
收藏(1)
已结贴  问题点数:20 回复次数:7 
关于因式分解程序的问题,希望大家能帮帮忙。
小弟刚自学的c语言,下面是我写的一个关于因式分解的程序,出现了不少问题,希望各位大侠能指出改进,小弟不胜感激。我想最后输出的时候变成9=3^2,但是由于种种问题,不得不将其设置成9=1*3^2,希望各位大侠帮忙支支招。在此谢过。下面是自写的程序

#include<stdio.h>
#include<math.h>
int primer(int);
void part(int,int);
int main(void)
{
int n,i,m;
printf("enter a number:\n");
scanf("%d",&n);
printf("%d=%d",n,1);//为了输出格式变成9=1*3^2,才设置的这句,如果能改进希望大家指出,谢谢。
for(i=2;i<=n;i++)//设置循环来找素因子。
{
if(primer(i)==1)//判断是否为素数。
part(n,i);//若i是n的一个素因数,输出由i的j次方组成的一个因数。
}
printf("\n");
printf("\n");
printf("\n");
return 0;
}

/*这个函数是用来分解出n的一个素因子j次方组成的因子,如part(12,2)可找出一个因子为2^2*/
void part(int n,int i)
{
int j=0;
if(n%i==0)
{
while(n%i==0){
    n=n/i;
    j++;}

printf("*(%d^%d)",i,j);

}

}


/*这个函数是用来判断是否为质数的*/
int primer(int n)
{
int i,z=0;
if(n==2)
z=1;
else{
for(i=2;i<n;i++)
{
   
    if(n%i!=0){
    z=1;
    continue;}
    else{
    z=0;
    break;}
}
}
return z;
}
搜索更多相关主题的帖子: void c语言 因式分解 不胜感激 include 
2012-02-06 12:17
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:15 
不知道这个是否满足你的要求
程序代码:
#include <stdio.h>

void fact(int n)
{
    int i, c, flag = 0;
    printf("%d = ", n);
    if(n <= 2)
    {
        printf("%d\n", n);
        return;
    }
    for(c = 0; !(n & 1); c++, n >>= 1);
    if(c){ printf("2"); flag = 1;}
    if(c > 1) printf("^%d", c);
    for(i = 3; i <= n; i += 2)
    {
        for(c = 0; n % i == 0; c++, n /= i);
        if(c)
        {
            if(flag) printf(" * ");
            printf("%d", i);
            if(c > 1) printf("^%d", c);
            flag = 1;
        }
    }
    printf("\n");
}

int main()
{
    int n;
    scanf("%d", &n);
    fact(n);
    return 0;
}

重剑无锋,大巧不工
2012-02-06 13:33
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:5 
回复 2楼 beyondyf
很厉害的代码。
for(c = 0; !(n & 1); c++, n >>= 1);
等价于
for(c = 0; n % 2 == 0; c++, n /= 2);

梅尚程荀
马谭杨奚







                                                       
2012-02-06 14:22
zxd675816777
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:252
专家分:631
注 册:2012-2-3
收藏
得分:0 
回复 2楼 beyondyf
额,谢谢你哈,可以实现,但是上面有一些地方不是很理解额。嘿嘿,我刚接触,水平很那啥额。。。

数学好难!
2012-02-06 14:59
zxd675816777
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:252
专家分:631
注 册:2012-2-3
收藏
得分:0 
回复 2楼 beyondyf
额,这句我就看了半天额,谢谢哈。。。谢谢哈

数学好难!
2012-02-06 15:00
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
连我自己也不知道什么时候形成这种代码风格的,总之我的代码现在在越写越短,但并不以牺牲可读性为代价,该加的空格一个也不少。这需要扎实的语法功底。
有一天我在书店看到本叫《短码之美》的书,翻了翻发现这兄弟和我有一样的审美观,而且他更极致。呵呵,知音啊,不过我没买他的书。

我的算法精华就在这两句里,其它部分除了对2的单独处理外都是输出格式控制。
for(i = 3; i <= n; i += 2)
for(c = 0; n % i == 0; c++, n /= i);
而这两句的原理源自素数筛法,这是原创内容。知识要活学活用,不要以为一提筛法就必须弄个大数组出来。学是手段而不是目的,目的是用。把学会的知识恰当地使用出来才是编程之道。这需要时间的磨练,初学也不必急于求成。

重剑无锋,大巧不工
2012-02-06 17:35
zxd675816777
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:252
专家分:631
注 册:2012-2-3
收藏
得分:0 
回复 5楼 zxd675816777
恩呢,好的,现在c primer plus 还正在看呢额,希望开学后能看完额。。。到时候不懂再请教你们了哈。谢谢咯。。。

数学好难!
2012-02-06 18:43
zxd675816777
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:252
专家分:631
注 册:2012-2-3
收藏
得分:0 
回复 6楼 beyondyf
恩呢,好的,现在c primer plus 还正在看呢额,希望开学后能看完额。。。到时候不懂再请教你们了哈。谢谢咯。。。

数学好难!
2012-02-06 18:57
快速回复:关于因式分解程序的问题,希望大家能帮帮忙。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031219 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved