鱼C论坛

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

[已解决]执行程序时sqrt报错

[复制链接]
发表于 2020-2-4 20:44:18 | 显示全部楼层 |阅读模式

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

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

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

int main()
{
        unsigned long long num = 600851475143;

        for(unsigned long long i = (unsigned long long)sqrt((double)num); i > 0; i--) // sqre执行时报错,在头文件加了math.h
        {
                if (!(num % i))
                {
                        printf("%llu", i);
                        break;
                }
        }
        return 0;
}


unbunto告警信息如下:
/tmp/ccRMBou7.o:在函数‘main’中:
test3.c:(.text+0x3c):对‘sqrt’未定义的引用
collect2: error: ld returned 1 exit status

最佳答案
2020-2-5 00:23:39
何摆鱼呀 发表于 2020-2-4 23:47
还是不可以

编译的时候在指令后面加 -lm试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-4 21:35:47 | 显示全部楼层
把for里面第一项定义和赋值语句提出来:
        unsigned long long i = (unsigned long long)sqrt((double)num);
        for(i; i > 0; i--)
可能是因为括号的原因导致无法编译
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-4 23:47:32 | 显示全部楼层
EthanHsiung 发表于 2020-2-4 21:35
把for里面第一项定义和赋值语句提出来:
        unsigned long long i = (unsigned long long)sqrt((doub ...

还是不可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 00:23:39 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
何摆鱼呀 发表于 2020-2-4 23:47
还是不可以

编译的时候在指令后面加 -lm试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 10:06:01 | 显示全部楼层
先声明一下 i 试试:
#include <stdio.h>
#include <math.h>

int main()
{
        unsigned long long num = 600851475143, i;      // 修改

        for(i = (unsigned long long)sqrt((double)num); i > 0; i--) // 修改
        {
                if (!(num % i))
                {
                        printf("%llu", i);
                        break;
                }
        }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-5 19:05:33 | 显示全部楼层
一个账号 发表于 2020-2-5 10:06
先声明一下 i 试试:

还是不能编译过, 加上-lm就可以编译过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-5 19:07:03 | 显示全部楼层
EthanHsiung 发表于 2020-2-5 00:23
编译的时候在指令后面加 -lm试试

加了-lm可以编译通过, 是不是只要Linux系统使用了math库就需要在编译时加上-lm
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 19:09:39 | 显示全部楼层
何摆鱼呀 发表于 2020-2-5 19:07
加了-lm可以编译通过, 是不是只要Linux系统使用了math库就需要在编译时加上-lm

是的,之前没注意是在Linux上,加-lm是为了链接上这个库
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-5 19:12:41 | 显示全部楼层
EthanHsiung 发表于 2020-2-5 00:23
编译的时候在指令后面加 -lm试试

for(unsigned long long i = (unsigned long long)sqrt((double)num); i > 0; i--)    为什么num的平方根可以保证i是素数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 19:19:21 | 显示全部楼层
何摆鱼呀 发表于 2020-2-5 19:12
for(unsigned long long i = (unsigned long long)sqrt((double)num); i > 0; i--)    为什么num的平方根 ...

i是num的平方根强制转换成整型的结果,不能保证i是素数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 05:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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