执行程序时sqrt报错
#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
把for里面第一项定义和赋值语句提出来:
unsigned long long i = (unsigned long long)sqrt((double)num);
for(i; i > 0; i--)
可能是因为括号的原因导致无法编译 EthanHsiung 发表于 2020-2-4 21:35
把for里面第一项定义和赋值语句提出来:
unsigned long long i = (unsigned long long)sqrt((doub ...
还是不可以{:5_100:} 何摆鱼呀 发表于 2020-2-4 23:47
还是不可以
编译的时候在指令后面加 -lm试试
先声明一下 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;
} 一个账号 发表于 2020-2-5 10:06
先声明一下 i 试试:
还是不能编译过, 加上-lm就可以编译过 EthanHsiung 发表于 2020-2-5 00:23
编译的时候在指令后面加 -lm试试
加了-lm可以编译通过, 是不是只要Linux系统使用了math库就需要在编译时加上-lm 何摆鱼呀 发表于 2020-2-5 19:07
加了-lm可以编译通过, 是不是只要Linux系统使用了math库就需要在编译时加上-lm
是的,之前没注意是在Linux上,加-lm是为了链接上这个库 EthanHsiung 发表于 2020-2-5 00:23
编译的时候在指令后面加 -lm试试
for(unsigned long long i = (unsigned long long)sqrt((double)num); i > 0; i--) 为什么num的平方根可以保证i是素数 何摆鱼呀 发表于 2020-2-5 19:12
for(unsigned long long i = (unsigned long long)sqrt((double)num); i > 0; i--) 为什么num的平方根 ...
i是num的平方根强制转换成整型的结果,不能保证i是素数
页:
[1]