有人可以彻底解释这个IsItPrime函数吗?
Can someone thoroughly explain this IsItPrime Function?
这是我在CodeReview网站上找到的函数,它确定一个数字是否是素数,同时还处理负数。很少有事情是我无法真正赶上的。
1(为什么第一个条件<= 3
应该处理负面因素?
2( return n > 1
实际返回的是什么?它是否以任何方式影响其他条件?
bool IsItPrime(int n)
{
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;
}
}
if(n <= 3) {
return n > 1;
}
如果不是最简单的推理,也是聪明的。 首先,如果你的数字为 3 或更少,则输入 if 正文。 这涵盖了前 2 个素数加上所有负数 0 和 1。 然后它继续return n > 1;
这意味着如果n
大于1
你将返回 true,否则返回 false。 因此,如果n
2
或3
,则该函数将返回true
。 它小于 2
然后返回 false
。它将与
if (n <= 1) return false;
else if (n == 2 || n == 3) return true
else if ...
但如您所见,这是更多的类型并添加 if 语句。
根据维基百科:
素数(或素数(是大于 1 的自然数
return n > 1
表示对于任何大于 1 的数字返回 true(即 2 或 3,因为这出现在测试 if n<=3
之后(。 0、1 或负数将使其返回 false。
1(为什么第一个条件是<= 3,当它应该处理时 底片? 2( 返回 n> 1 实际返回什么? 这些问题是相互关联的:
该函数可以采用负参数,但如您所见,第一组条件测试参数是否介于 1 和 3 之间。 2,3 是素数,它将返回 true,如果参数为 1,0 或负数,它将返回 false(因此它不适用于负数(。
if(n <= 3) {
return n > 1;
}
这将为所有小于或等于 3 的数字返回 false,但 2 和 3 除外。这也处理负数(任何负数将小于 3(。
else if(n % 2 == 0 || n % 3 == 0) {
return false;
}
这会对参数执行模运算,如果数字可被 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;
}
这将通过循环处理所有其他数字,直到您高于数字的平方根。它还执行模运算,这次使用 5、7 和所有值 n + 6、n + 8(<11、13>、<17、19> 等(。我们可以迭代 6,因为我们正在执行上面的 2 和 3 模运算。
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- 有人可以彻底解释这个IsItPrime函数吗?