【发布时间】:2020-09-09 06:08:10
【问题描述】:
我需要检查数学除法的结果是否为整数。
例如,8 / 2 = 4 没关系。 但是 5 / 2 = 2.5 应该没问题。
我尝试了以下方法:
bool isPrime(int num)
{
/* Checks all the numbers before the given input. If the result of
dividing
the input by one of those numbers is an int, then the input is not a
prime number. */
int i, check;
double result;
for (i=2; i<num; i++) {
result = (double) num / i;
check = (int) result;
if (isdigit(check))
return false;
}
return true;
}
我正在做关于isdigit 以及如何以正确方式插入参数的噩梦。我知道它需要一个int,但我有一个double,所以我不能真正将这些部分放在一起。
【问题讨论】:
-
isdigit是关于字符,而不是数字,所以它似乎不是你要找的。span> -
使用
%(modulus) 运算符检查除法后的余数:if (num % i == 0) /* num is a multiple of i --or-- num/i is an integer */; -
请显示整个函数。
-
对于素数搜索,您不需要搜索最多 N-1 个;直到并包括
ceil(sqrt(N))就足够了。如果 N 是合数,则一个因子不大于 √N,另一个不小于 √N)。在你检查了“被 2 整除”之后,你可以只检查奇数。如果您在循环外检查“可被 3 整除”,那么对于从 K 等于 1 开始的整数 K,所有较大的素数都具有 6K±1 的形式。即使 N 仅在数千个范围内,限制搜索范围也会产生根本的加速,更不用说更大了。使用“仅赔率”可以完成 1/2 的工作;使用 6K±1 做 1/3。