C语言高手帮忙看看这道题的答案有什么错误,提交到自动评测系统里总是说错误,附上题目和我的答案,谢谢

题目:N!的质因数分解【问题描述】将N!分解成质因数幂的乘积。【输入形式】从标准输入读取一个整数N(1<=N<=30000)。【输出形式】将结果写到标准输出。输出结果格式... 题目:N!的质因数分解

【问题描述】

将N!分解成质因数幂的乘积。

【输入形式】

从标准输入读取一个整数N(1<=N<=30000)。

【输出形式】

将结果写到标准输出。输出结果格式为:p1^k1*p2^k2*…*pn^kn,其中: 1. N! = p1^k1*p2^k2*…*pn^kn; 2. pi为质数,(1 <= i <= n); 3. pi < pj,(1 <= i < j <= n); 4. ki为整数且ki > 1,(1 <= i < j <= n)。

【输入样例】

5

【输出样例】

2^3*3*5

【时间限制】

1s

【空间限制】

65536KB

【上传文件】

上传c语言源程序,文件名为decompose.c。

我编写的答案程序:
//
// decompose.c
//

#include <stdio.h>
#include <math.h>

int times(int n,int x)
{
if (n == 0) return 0;
return (n/x) + times (n/x, x);
}

int isPrime(int num)
{
int i;
if( num < 2) return 0;

for(i = 2;i <= sqrt(num); i++) {
if(num % i == 0) return 0;
}
return 1;
}

int main()
{
int n;
scanf("%d", &n);

int i, flag = 0;

if (n == 1) {
printf("1\n");
return 0;
}

for (i = 2; i <= n; i++) {
if (isPrime(i)) {
int counter = times(n, i);
if (counter == 1) {
if (flag) printf("*");
printf("%d", i);
flag = 1;
}else {
if (flag) printf("*");
printf("%d^%d", i, counter);
flag = 1;
}
}
}
printf("\n");
return 0;
}

评测系统返回的编译结果:
编译错误!
Compile Information :
/tmp/ccrMYeq4.o: In function
`main':
decompose.c:(.text+0x17d): undefined reference to `sqrt'
collect2:
ld returned 1 exit status
展开
 我来答
浣月_楼主
2013-06-01 · 超过19用户采纳过TA的回答
知道答主
回答量:78
采纳率:0%
帮助的人:49.8万
展开全部

我来教你。我要悬赏分哟,我可是穷人。。。新手


帮你搞定了,只需要改动一个语句就好了。

#include <stdio.h>

#include <math.h>


int times(int n,int x)

{

    if (n == 0) return 0;

    return (n/x) + times (n/x, x);

}


int isPrime(int num)

{

    int i;

    if( num < 2) return 0;

    

    for(i = 2;i <= sqrt(num); i++) {

        if(num % i == 0)  return 0;

    }

    return 1;

}


int main()

{

      int i,flag=0,n;


    scanf("%d",&n);

    

  

    

    if (n == 1) {

        printf("1\n");

        return  0;

    }

    

    for (i = 2; i <= n; i++) {

        if (isPrime(i)) {

            int counter = times(n, i);

            if (counter == 1) {

                if (flag) printf("*");

                printf("%d", i);

                flag = 1;

            }else {

                if (flag) printf("*");

                printf("%d^%d", i, counter);

                flag = 1;

            }

        }

    }

    printf("\n");

    return 0;

}

百度网友83cdc1c
2013-05-28 · TA获得超过5792个赞
知道大有可为答主
回答量:1907
采纳率:100%
帮助的人:853万
展开全部
貌似isPrime函数里sqrt函数不支持,你用i*i<=num试试吧

for(i = 2;i*i <= num; i++)
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式