质数详解
质数
除了 1 和 自己本身, 其他不能整除
逻辑: 你是如何确定一个数字是质数的 ?
假设: 7
7 % 2 不能整除
7 % 3 不能整除
7 % 4 不能整除
7 % 5 不能整除
7 % 6 不能整除
结果
如果是质数, 需要在过程后才能知道, 使得循环可以正常结束
如果不是质数, 可能在过程中就知道了, 使得循环被打断从而非正常结束
代码:
从 2 到 自己-1 依次去整除尝试
方案1:假设法(开关)
var n = 8
// // 步骤1: 定义一个变量, 假设这个数字是质数
var flag = true // 假设 n 是质数
// // 步骤2: 求证我的假设
// // 从 2 到 自己-1 依次去取余, 只要有一个为 0 了
// // 假设错误, 推翻我的假设
for (var i = 2; i <= n - 1; i++) {
// // 依次取余
if (n % i === 0) {
// // 推翻我的假设
flag = false
// // 只要有一个推翻了, 后面不需要了
break
}
}
// // 循环结束以后
// // 如果 flag === true 说明从头到尾没有被推翻过假设
// // 说明所有的数字都不能整除, 那么就是一个质数
// // 如果 flag === false 说明从头到尾至少有一个推翻过假设
// // 说明至少有一个数字整除了, 那么肯定不是一个质数
if (flag) {
console.log(n + ' 是质数')
} else {
console.log(n + ' 不是质数')
}
var n = 7
// 步骤1: 定义一个变量, 假设这个数字是质数
var flag = true
// // 步骤2: 求证我的假设
// // 问题: 有必要循环到 n-1 吗 ? 只要到达自己的一半即可
for (var i = 2; i <= n / 2; i++) {
if (n % i === 0) {
flag = false
break
}
}
// 循环结束以后
if (flag) {
console.log(n + ' 是质数')
} else {
console.log(n + ' 不是质数')
}
方案2: 计数法
var n = 7
// // 步骤1: 准备一个计数器
var total = 0
// // 步骤2: 循环依次去尝试每一个数字是否能整除
// // 不能整除什么都不做, 如果可以整除计数器++
for (var i = 2; i <= n / 2; i++) {
if (n % i === 0) {
total++
break
}
}
// 如果 total 还是 0, 说明没有整除的, 是一个质数
// 如果 total 是 1, 说明至少有一个整除了, 不是一个质数
方案3: 打断循环法
如果循环正常结束了, 说明 是质数
如果循环非正常结束, 说明 不是质数
如何判断一个循环是不是正常结束
for (var i = 0; i <= 5; i++) {
if (i === 3) break
}
循环结束以后
如何判断循环是不是正常结束的
当 i <= 5 为 false, 说明循环正常结束了
当 i <= 5 为 true, 说明是在某一次循环中被打断了
使用循环一模一样的条件来判断, 如果为 false, 说明循环正常结束了, 如果为 true 说明非正常结束
使用循环完全相反的条件来判断, 如果为 true 说明循环正常结束了, 如果为 false 说明非正常结束
console.log(i, i <= 5)
var n = 129
for (var i = 2; i <= n / 2; i++) {
if (n % i === 0) break
}
// 判断循环是不是正常结束
i > n / 2 ? console.log(n + ' 是质数') : console.log(n + ' 不是质数')