我正在定义一个函数来测试一个数字是否为素数,并且我有一个有效的算法(在 Python 中)并且我已经将它的大部分移植到 Lisp。然而,问题是我的素性测试即使在不应该通过的情况下也一直通过。例如,isPrime(13)仍然达到return NIL即使它应该失败的when条件。
(defun isPrime(n)
(cond
((< n 2); numbers less than 2 aren't prime
NIL
)
((equal n 2); 2 is the only even prime
T
)
((equal (rem n 2) 0); Even numbers are never prime (besides 2)
NIL
)
((> n 2)
(loop for i from 2 to n do(
when(equal (rem n i) 0);If n is evenly divisible by i, we have found a factor other than 1 …Run Code Online (Sandbox Code Playgroud) 我们如何使用sqrt(n)而不是n/2代码?使用是否正确sqrt(n)?
static boolean isPrime(long n)
{
if(n<=1) return false;
double limit = Math.sqrt(n);
for(long i = 2; i <= limit; i++)
{
if(n%i==0) return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud) 我知道这个问题之前已经被回答过,但我不太明白对该问题的解释。
我在 HackerRank 上做了 30 天的代码,其中一个练习是检查一个数字是否是素数。不幸的是,我自己无法做到这一点,所以我在多次尝试后检查了给定的解决方案。即使在查看了解决方案之后,我也无法理解其中一行:
// Check for primality using odd numbers from 3 to sqrt(n)
for(int i = 3; i <= sqrt(n); i += 2){
// n is not prime if it is evenly divisible by some 'i' in this range
if( n % i == 0 ){
isPrime = false;
}
}
Run Code Online (Sandbox Code Playgroud)
为什么sqrt(n)在for循环中使用?
我收到一个错误,因为“浮动”对象不能解释为整数
num=5
for x in range(num/2):
print("hello")
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个应用程序来检查数字是否为素数.
有人可以帮我查一下这个号码吗?
我需要一个简单的答案,而不是非常先进的算法.我是编程新手.
以下代码用于质数。我想知道为什么我们i<=n/2在循环中使用条件。
C程序:
#include <stdio.h>
int main()
{
int n, i, flag = 0;
printf("Enter a positive integer: ");
scanf("%d",&n);
for(i=2; i<=n/2; ++i)
{
// condition for nonprime number
if(n%i==0)
{
flag=1;
break;
}
}
if (flag==0)
printf("%d is a prime number.",n);
else
printf("%d is not a prime number.",n);
return 0;
}
Run Code Online (Sandbox Code Playgroud)