C++ 有人能彻底解释这个IsItPrime函数吗?

C++ 有人能彻底解释这个IsItPrime函数吗?,c++,primes,C++,Primes,这是我在CodeReview网站上找到的函数,它确定一个数字是否是素数,同时也处理负数。有几件事我真的赶不上 1) 为什么第一个条件是 但正如您所看到的,这需要更多的输入并添加一个if语句 但正如您所看到的,这需要更多的输入并添加一个if语句 1) 为什么是第一个条件 1) 根据维基百科,为什么第一个条件是: 素数(或素数)是大于1的自然数 return n>1表示对大于1的任何数字返回真值(即2或3,因为根据维基百科,如果n,则在测试后出现此值: 素数(或素数)是大于1的自然数 return

这是我在CodeReview网站上找到的函数,它确定一个数字是否是素数,同时也处理负数。有几件事我真的赶不上

1) 为什么第一个条件是

但正如您所看到的,这需要更多的输入并添加一个if语句

但正如您所看到的,这需要更多的输入并添加一个if语句

1) 为什么是第一个条件
1) 根据维基百科,为什么第一个条件是:

素数(或素数)是大于1的自然数


return n>1
表示对大于1的任何数字返回真值(即2或3,因为根据维基百科,如果n,则在测试
后出现此值:

素数(或素数)是大于1的自然数

return n>1
表示任何大于1的数字都返回真值(即2或3,因为如果n 这对你的参数进行模运算,如果这个数可以被2或3整除(这也会使它不是素数),则返回false。我们可以安全地调用它,即使2和3是可以整除的,因为它们是上面处理的

else {
    for(int i(5); i * i <= n; i += 6) {
        if(n % i == 0 || n % (i + 2) == 0) {
            return false;
        }
    }
    return true;
}
else{
对于(int)i(5);i*i
这对你的参数进行模运算,如果这个数可以被2或3整除(这也会使它不是素数),则返回false。我们可以安全地调用它,即使2和3是可以整除的,因为它们是上面处理的

else {
    for(int i(5); i * i <= n; i += 6) {
        if(n % i == 0 || n % (i + 2) == 0) {
            return false;
        }
    }
    return true;
}
else{

对于(i 5(i);i * i),我不认为负数可以是素数。如果你可以考虑负数,没有一个是素数,因为它们也会有-- 1和-n作为因素。第一部分说所有负数返回假,1返回假,2和3返回truebe是“句柄也为负数”。只是意味着它返回所有的负输入的代码>代码< /代码>…你能给出一个链接到原始的帖子吗?注意这是一个很差的算法。它测试<代码> n% 35 < /代码>,即使在<代码> n% 5 < /> >或<代码> n% 7 < /代码>之后是没有意义的。我不认为负数可以是素数。g将是素数,因为它们也将-1和-n作为因子。第一部分说所有负数返回false,1返回false,2和3返回true可能“句柄也为负数”这仅仅意味着它对所有负输入返回
false
。你能给原始帖子一个链接吗?请注意,这是一个非常糟糕的算法。它测试
n%35
,即使在
n%5
n%7
之后这是毫无意义的。“这将对所有小于或等于3的数字返回false,除了2。”意味着3将产生
false,
但它产生
true
“对于所有小于或等于3的数字,除了2之外,这将返回false。”这意味着3会产生
false,
但它会产生
true
。我以前从未听说过这种语法。这是我所能期望的最好答案。谢谢你,伙计!添加函数产生UB的高
int
s会很有趣……我认为它适用于数学平方以上的每一个素数(floor(sqrt(int_MAX)))@Rose这里的语法没有什么特别。
n>1
是一个类似于
n的表达式。还有一件事,我不喜欢把事情视为理所当然。你能给我介绍一下返回n>1的逻辑和它的结果吗?比如,为什么大于等于真,否则为假。@Kevin哦,这就是结果vs效果的情况吗?我已经知道了以前从未听说过这样的语法。这是我所希望的最好的答案。谢谢,伙计!添加函数结果为UB的高
int
s会很有趣……我认为这是数学平方以上的每个素数(floor(sqrt(int_MAX)))@Rose这里的语法没有什么特别。
n>1
是一个类似于
n的表达式。还有一件事,我不喜欢把事情想当然。你能给我介绍一下返回n>1的逻辑和它的结果吗?比如,为什么大于等于真,否则等于假。@Kevin哦,这就是结果vs效果的情况了?
 if (n <= 1) return false;
 else if (n == 2 || n == 3) return true
 else if ... 
if(n <= 3) {
    return n > 1;
}
else if(n % 2 == 0 || n % 3 == 0) {
    return false;
} 
else {
    for(int i(5); i * i <= n; i += 6) {
        if(n % i == 0 || n % (i + 2) == 0) {
            return false;
        }
    }
    return true;
}