质数 详解

质数详解

质数

​ 除了 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 + ' 不是质数')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值