CSDN的C1考试,质数问题,一不小心就错失得分
2021年8月22号,怀着忐忑的心参加了CSDN的C1考试,为自己能顺利通过,真没想到却栽在了质数大题上。错失10分真的好可惜。
现在回顾一下这道题目。
题目要求:
1、生成2个1~100的随机整数。(是1~50 还是 1~100 有点记不清楚了)
2、打印出这2个整数的所有质数。
这道题主要是考查我们对质数、JS中Math中的相关方法的理解
第一:
什么是质数?
能被1及自身整除的数为质数
第二:
与本题相关的Math方法有哪些?
Math.random() 随机数生成方法
Math.floor() 生成的随机数按下取整。如50.62 结果为 50 ; -50.62 结果为 -51
Math.ceil() 生成的随机数按上取整。如50.62 结果为 51 ; -50.62 结果为 -50
讲真的这道题目真不难,考试时我的答案是:
var a1 = Math.floor(Math.random() * 100)console.log("====" + a1)var a2 = Math.floor(Math.random() * 100)console.log("====" + a2)if(a1 > a2){console.log(a1 + "大")}var arr1 = check(a1)console.log(arr1)var arr2 = check(a2)console.log(arr2)var arr = arr1.concat(arr2)console.log(arr)function check(obj) {var arr = []var count = 0for (var i = 2; i< obj; i++){for(var j = 2; j<=obj; j++){if(obj % j === 0){count++}}if(count === 2){arr.push(i)}count = 0}return arr}
细心的同学肯定已经看出上面的问题了,
考试完毕后,我重新优化了一下:
var a1 = Math.floor(Math.random() * 100)console.log("====" + a1)var a2 = Math.floor(Math.random() * 100)console.log("====" + a2)if(a1 > a2){console.log(a1 + "大")}var arr1 = check(a1)console.log(arr1)var arr2 = check(a2)console.log(arr2)var arr = arr1.concat(arr2)console.log(arr)function check(obj) {var arr = []var count = 0for (var i = 2; i< obj; i++){if(t_check(i)){arr.push(i)}}return arr}function t_check(obj) {for(var j = 2; j<obj; j++){if(obj % j === 0){return false}}return true}
上面是优化之后的代码。
评论
