**已关闭。**此问题为not reproducible or was caused by typos。目前不接受答复。
此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
6天前关闭
Improve this question
我正在写一个函数来确定一个数字的素因子,并在一个双向链表中返回它们。代码如下。(create_list、add_to_tail和print_DLL对DLL执行操作并正常工作)。
DLL* primefactors(int a, DLL *factors){
int i;
int primes[40] = {
2, 3, 5, 7, 11, 13, 17, 19, 23, 29,
31, 37, 41, 43, 37, 53, 59, 61, 67, 71,
73, 79, 83, 89, 97, 101, 103, 107, 109, 113,
127, 131, 137, 139, 149, 151, 157, 163, 167, 173};
factors = create_list(1); // create with node of "1" to begin with
i = 0;
while(i < 40 && a != 1){
if (a % primes[0] == 0){
printf("%d is a factor of %d; ", primes[i], a);
add_to_tail(factors, primes[0]);
a = a / primes[0];
printf("remainder is %d\n", a);
} else {
printf("%d is not a factor of %d; increasing to %d\n", primes[i], a, primes[i + 1]);
i++;
}
}
print_DLL(factors);
return factors;
}
该函数在测试因子为2时正常工作,但不能将更高的素数识别为因子。例如primefactors(8)
正确地给出1,2,2,2;但是primefactors(24)
给出了1,2,2,2,然后不认为3是一个因子,而是运行到素数列表的末尾(请忽略列表开头的1)。
为什么会这样,请问如何解决?我原以为a / prime[i]
会给予一个精确的整数,因为a和prime[i]都是整数,避免了浮点数比较的问题。
谢谢你!
1条答案
按热度按时间wh6knrhe1#
正如Barmar和Some programmer dude在评论中指出的那样,除法应该使用素数[i]而不是素数[0]。有了这个修正,它就起作用了。谢谢!