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 = 0
for (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 = 0
for (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
}
上面是优化之后的代码。
评论