import java.util.ArrayList; import java.util.List; public class Solution { /** * 获取n个素数 * n: 素数个数 * 返回:最小的N个素数 */ public List<Integer> getPrimes(int n) { List<Integer> ret = new ArrayList<Integer>(); // ret.add(x); int number = Integer.MAX_VALUE; int counter = 0; for (int i = 2; i < number; i++) { if (n <= 0) { break; } counter = 0; for (int j = 2; j <= Math.sqrt(i); j++) { if (i % j == 0) { counter++; break; } } if (counter == 0) { ret.add(i); n--; } } return ret; } }
package prime;
/**
* 思路:从整数中提取前n个素数,放入ret中。放入ret条件是Boolean isPrimes(),return ret条件是count<=n-1
*/
import java.util.ArrayList;
import java.util.List;
public class Solution {
public static void main(String[] args) {
System.out.print(getPrimes(3));
}
/**
* 获取n个素数
* n: 素数个数
* 返回:最小的N个素数
*/
public static List<Integer> getPrimes(int n) {
int number = Integer.MAX_VALUE;
int count = 0;
List<Integer> ret = new ArrayList<Integer>();
for(int i=0;i<number&&count<=n-1;i++){
if(isPrime(i)){
ret.add(i);
count++;
}
}
return ret;
}
public static boolean isPrime(int x){
boolean flag = true;
if(x<2)
return false;
else{
for(int i=2;i<=(int)Math.sqrt(x);i++){
if(x%i==0){
flag = false;
break;
}
}
}
return flag;
}
}
importjava.util.ArrayList;importjava.util.List;publicclassSolution {/*** 获取n个素数* n: 素数个数* 返回:最小的N个素数*/publicList<Integer> getPrimes(intn) {List<Integer> ret = newArrayList<Integer>();if(n == 0){returnret;}ret.add(2);n-=1;// ret.add(x);inti = 3;while(n > 0){if(isSuShu(i)){ret.add(i);n--;}i+=2;}returnret;}publicbooleanisSuShu(intn){intk = (int)Math.sqrt(n);for(inti = 2; i <= k; i++){if(n % i == 0){returnfalse;}}returntrue;}}
import java.util.ArrayList; import java.util.List; public class Solution { /** * 获取n个素数 * n: 素数个数 * 返回:最小的N个素数 */ public List<Integer> getPrimes(int n) { List<Integer> ret = new ArrayList<Integer>(); // ret.add(x); int m; int l = 0; int ii = Integer.MAX_VALUE; if(n > 1){ ret.add(2); l = 1; } label: for(int i = 3; i <= ii && l < n; i += 2){ m = 3; for(; m < i; m += 2){ if(i % m == 0){ continue label; } } ret.add(i); l++; } return ret; } }
import java.util.ArrayList; import java.util.List; public class Solution { /** * 获取n个素数 * n: 素数个数 * 返回:最小的N个素数 */ public List < Integer > getPrimes(int n) { List < Integer > ret = new ArrayList < Integer > (); // ret.add(x); for (int i = 2; i < Integer.MAX_VALUE && ret.size() < n; i++) { boolean flag = true; int temp = (int)Math.sqrt(i); for (int j = 0; j < ret.size() && ret.get(j) <= temp; j++) if (i % ret.get(j) == 0) { flag = false; break; } if (flag) ret.add(i); } return ret; } }
#include <vector> using namespace std; class Solution { public: /** * 获取n个素数 * n: 素数个数 * 返回:最小的N个素数 */ vector<int> getPrimes(int n) { vector<int> ret; int d[800000]={0}; int i,j,N=0; d[1]=d[0]=1; for(i=4;i<800000;i+=2) d[i]=1; for(i=3;i*i<800000;i+=2) if(!d[i]) { for(j=i*i;j<800000;j+=2*i) { d[j]=1; } } for(i=0;i<800000;i++) if(!d[i]) { if(N==n)break; ret.push_back(i); N++; } return ret; } };
public class Solution { /** * 获取n个素数 * n: 素数个数 * 返回:最小的N个素数 */ public List<Integer> getPrimes(int n) { List<Integer> ret = new ArrayList<Integer>(); int sum = 0; int i = 1; while(n>sum){ i++; for(int j=2;j<=i;j++){ if(i%j ==0){ if(i==j){ ret.add(i); sum++; }else{ break; } } } } // ret.add(x); return ret; }
#! /bin/bash declare -i lastnum=0 primelist="2" if [ $# -gt 0 ];then (( lastnum+=$1 )) echo "positive primes up to $lastnum" if [ $lastnum -ge 2 ]; then echo "2" for n in `seq 3 2 $lastnum` do p=0 for t in $primelist do (( remainder=n%t )) if [ $remainder -eq 0 ]; then p=1 break fi done if [ $p -eq 0 ]; then echo $n if (( lastnum > (n * n) ));then primelist="$primelist $n" fi fi done fi fi
import java.util.ArrayList; import java.util.List; public class Solution { /** * 获取n个素数 * n: 素数个数 * 返回:最小的N个素数 */ public List<Integer> getPrimes(int n) { List<Integer> ret = new ArrayList<Integer>(); for(int i=2;i<=Integer.MAX_VALUE;i++){ int count=2; for(int j=2;j<=i/2;j++){ if(i%j==0){ count++; break; } } if(count==2){ if(ret.size()==n){ break; } ret.add(i); } } return ret; } }
#include <vector>using namespace std;classSolution {public:/*** 获取n个素数* n: 素数个数* 返回:最小的N个素数*/bool IsPrimer(intn){for(inti = 2;i*i<=n;++i)if(n%i==0)returnfalse;returntrue;}vector<int> getPrimes(intn) {vector<int> ret;intst = 2;while(n>0){if(IsPrimer(st)){ret.push_back(st);++st;--n;}else++st;}returnret;}};
#include <vector> #include <iostream> #include <climits> using namespace std; class Solution { public: const int SHIFT = 5; const int MASK = 0x1F; const int Max = INT_MAX; int bitmap[10000]{1,1,0,0,1,0}; void set_not_prime(int num){ bitmap[num >> SHIFT] |= (1<<(num&MASK)); } bool not_prime(int num){ return bitmap[num >> SHIFT] & (1<<(num&MASK)); } /* * 获取n个素数 * n: 素数个数 * 返回:最小的N个素数 */ vector<int> getPrimes(int n) { vector<int> ret; int count = 0; int pos = 2; while(count < n){ if(not_prime(pos)){ pos ++; continue; } count += 1; ret.push_back(pos); int up = pos + pos; while(up < 320000){ set_not_prime(up); up += pos; } pos += 1; } // ret.push_back(x); return ret; } };
//筛选法,再利用bitmap位标示整数 #include <vector> using namespace std; class Solution { public: /** * 获取n个素数 * n: 素数个数 * 返回:最小的N个素数 */ vector<int> getPrimes(int n) { vector<int> ret; if(n<=1) return ret; long i,j; unsigned char arr[1<<13]={0}; for(i=2;i<(1<<16);++i){ for(j=i+i;j<(1<<16);j=j+i){ arr[j/8]=arr[j/8]|(1<<(j%8)); } } for(i=2;i<(1<<16)&&n>0;++i){ if(!(arr[i/8]&(1<<(i%8)))){ ret.push_back(i); --n; } } return ret; } };
思路:首先判断给出的n是否大于0,如果不是则直接返回ret。如果n > 0,则进行一下处理:
vector<int> getPrimes(int n) {
vector<int> ret;
// ret.push_back(x);
int prime_cnt =0;
for(int i=2;prime_cnt<n;i++){
bool is_prime =1;
for(int j=0;j<ret.size()&&(ret[j]*ret[j]<=i);j++){
if(i%ret[j]==0){
is_prime =0;
break;
}
}
if(is_prime){
ret.push_back(i);
prime_cnt++;
}
}
return ret;
}