我们先来明确一下什么是素数:
素数也叫质数,素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
所以 1 不是素数,2是素数。
我们可以用一个简单的for循环来求一个数是不是素数,如果这个数是素数,那么除了1 和它本身外,一定没有其它的因数。
解题思路:
1.先定义一个变量 flag = true 默认这个数为素数
2.在循环开始前就过滤掉 1 和它自身
3.如果这个数还能被别的数取余成功,那么他一定不是素数
如果我们想要求出 2 - 150内的所有素数,那么:
理由如下:循环2 - 150之内的每个数,把它放进写好的函数里,如果return 的结果为 true,说明它不能被其它数整除。这就是我们想要的素数,把它添加到空数组里。否则不予处理。
对结果进行去重,就得出了答案
console.log(new Set(arr))
好,看到这里就说明你已经完全掌握了素数的基本概念,我们来拓展一个小练习,规则如下:
题目要求:
1.首先这个数本身不是素数;
2.这个数可以分解为 a 和 b的乘积;
3.a 和 b 都是素数
求 [150 , 200] 所有满足条件的数
解题思路:
1. 从 2 开始排除它自己,如果还能被分解为 a 和 b,那么它一定不是素数;
2. 首先写一个分解函数,判断由它分解之后的 a * b = 它;
3. 把 a 和 b 放进判断素数的函数里,结果都为true ,则这个数满足条件
算法如下:
答案是12个:
0: 155
1: 158
2: 159
3: 161
4: 166
5: 169
6: 177
7: 178
8: 183
9: 185
10: 187
11: 194
练习题:
回顾一下,如果一个数大于 1,且其因数只有 1 和它自身,那么这个数是素数。
例如,2,3,5,7,11 以及 13 是素数。
回顾一下,如果一个数从左往右读与从右往左读是一样的,那么这个数是回文数。
例如,12321 是回文数。
10 ^ 8 <= N <= 2 * 10 ^ 8
求出大于或等于 N 的最小回文素数。
题目来源
请将你的答案打在评论区与我印证。我们一起学习共同进步。
解题思路:
1. javaScript 里 a 的 b 次幂写作 Math.pow(a, b);
2. 可以先求出所有的回文数,把回文数逐个放进 判断素数的函数里(反向也可以);
3. 假设一个num = 12321,将它转换为字符串,那么num[0] === num[num.length - 1] 项,不难看出一个规律 num [n] === num [num.length - 1 - n];
算法如下:
我把计算结果打在评论区了,跟我一起验证一下吧
到底了!原创不易,转载请注明出处。
前端的学习不是一蹴而就,不积跬步无以至千里,不积小流无以成江海。持续不断的努力才能让你我有所收获
不辜负每一份真情,不嘲笑每一个正在努力的人,力所能及的对别人施以援手,每天都要强化自己,洗去铅华才能绽放光芒。