- 题目描述:
- 题目链接:
https://www.nowcoder.com/practice/1033cb51ef754f25aefd8057b534286c?
- 设计思想:
-视频讲解链接B站视频讲解
- 复杂度分析:
- 代码:
c++版本:
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 给定一个数字n,返回[7,n)内有多少素数。 * @param n int整型 代表题目中的n * @return int整型 */ //埃氏筛法 int prime[1000005]; //第i个素数 bool is_prime[1000005]; //is_prime[i]为true时表示i是素数 //返回n以内素数的个数 void sieve(int n){ int p = 0; for(int i = 0; i <= n; i++) is_prime[i] = true; is_prime[0] = is_prime[1] = false;//0和1不是素数 for(int i = 2; i <= n; i++){ if(is_prime[i]){ prime[p++] = i; for(int j = 2*i; j <= n; j+=i) is_prime[j] = false; //筛去所有素数的倍数 } } } int solve(int n) { // write code here sieve(n);//进行筛素数 int res = 0; //找[7,n)的素数 for(int i = 7;i < n;i ++){ if(is_prime[i]) res ++; } return res; } };
Java版本:
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 给定一个数字n,返回[7,n)内有多少素数。 * @param n int整型 代表题目中的n * @return int整型 */ //埃氏筛法 public int [] prime = new int [1000005]; //第i个素数 public boolean[] is_prime = new boolean[1000005]; //is_prime[i]为true时表示i是素数 //返回n以内素数的个数 public void sieve(int n){ int p = 0; for(int i = 0; i <= n; i++) is_prime[i] = true; is_prime[0] = is_prime[1] = false;//0和1不是素数 for(int i = 2; i <= n; i++){ if(is_prime[i]){ prime[p++] = i;//标记素数是谁 for(int j = 2*i; j <= n; j+=i) is_prime[j] = false; //筛去所有素数的倍数 } } } public int solve(int n) { // write code here sieve(n);//进行筛素数 int res = 0; //找[7,n)的素数 for(int i = 7;i < n;i ++){ if(is_prime[i]) res ++; } return res; } }
Python版本:
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # 给定一个数字n,返回[7,n)内有多少素数。 # @param n int整型 代表题目中的n # @return int整型 # prime = [0]* 1000005#第i个素数 is_prime = [(True)]*1000005#is_prime[i]为true时表示i是素数 class Solution: #埃氏筛法 #返回n以内素数的个数 def sieve(self,n): p = 0 is_prime[0] = is_prime[1] = False#0和1不是素数 for i in range(2,n+1): if is_prime[i]: prime[p] = i#标记素数是谁 p += 1 for j in range(2*i,n + 1,i): is_prime[j] = False#筛去所有素数的倍数 def solve(self , n ): # write code here self.sieve(n)#进行筛素数 res = 0 #找[7,n)的素数 for i in range(7,n): if is_prime[i]: res += 1 return res
JavaScript版本:
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 给定一个数字n,返回[7,n)内有多少素数。 * @param n int整型 代表题目中的n * @return int整型 */ //埃氏筛法 let prime = new Array(); //第i个素数 let is_prime = new Array(); //is_prime[i]为true时表示i是素数 //返回n以内素数的个数 function sieve(n){ let p = 0; for(let i = 0; i <= n; i++) is_prime[i] = true; is_prime[0] = is_prime[1] = false;//0和1不是素数 for(let i = 2; i <= n; i++){ if(is_prime[i]){ prime[p++] = i;//标记素数是谁 for(let j = 2*i; j <= n; j+=i) is_prime[j] = false; //筛去所有素数的倍数 } } } function solve( n ) { // write code here sieve(n);//进行筛素数 let res = 0; //找[7,n)的素数 for(let i = 7;i < n;i ++){ if(is_prime[i]) res ++; } return res; } module.exports = { solve : solve };