1. 程式人生 > >篩選法求N範圍內的所有素數

篩選法求N範圍內的所有素數

先把N個自然數按次序排列起來。1不是質數也不是合數,所以排除1,從2開始。2是質數留下來,把後面能被2整除的數全部刪除;接著留下來的第二個素數是3,把後面能被3整除的數刪除;依次後移,直到N。我用操作最簡單的vector容器實現,看程式碼:


#include <iostream>
#include <vector>
using namespace std;
int main(){
	int n;
	cin>>n;
	if(n<=1){
		cout<<"error!"<<endl; //如果n<=1,則無意義,返回0;
		return 0;
	}
	vector<int>vec;
	for(int i = 2;i<=n;i++){
		vec.push_back(i);   //從2開始,依次放入容器
	}
	int i = 0;
	while(i<vec.size()){
		for(int j = i+1;j<vec.size();j++){
			if(vec[j] % vec[i] == 0){
				vec.erase(vec.begin()+j);   //如果能被整除,則直接刪除掉
			}
		}
		i++;
	}

	for(int i=0;i<vec.size();i++){
		cout<<vec[i]<<' ';
	}
	return 0;
}



相關推薦

篩選N範圍所有素數

先把N個自然數按次序排列起來。1不是質數也不是合數,所以排除1,從2開始。2是質數留下來,把後面能被2整除的數全部刪除;接著留下來的第二個素數是3,把後面能被3整除的數刪除;依次後移,直到N。我用操作最簡單的vector容器實現,看程式碼: #include <io

python用遞迴篩選N以內的孿生質數(孿生素數)--附氣泡排序和插入排序練習

本人最近讀完一本書《質數的孤獨》,裡面講到孿生質數,就想查一下孿生質數的分佈情況。其中主要用到了計算質數(素數)的方法,搜了一下,排名前幾的都是用for迴圈來做的,感覺略微麻煩了一些,在比較一些還是覺得用遞迴篩選法來解決這個問題。 新建List,然後從第0位開始,如果後面的能被這個數整除,則從陣

java用遞迴篩選N以內的孿生質數(孿生素數)--附氣泡排序和插入排序練習

本人最近讀完一本書《質數的孤獨》,裡面講到孿生質數,就想查一下孿生質數的分佈情況。其中主要用到了計算質數(素數)的方法,搜了一下,排名前幾的都是用for迴圈來做的,感覺略微麻煩了一些,在比較一些還是覺得用遞迴篩選法來解決這個問題。 新建List<Integer>,然後從第0位開始,如

java用遞迴篩選N以內的孿生質數(孿生素數

本人最近讀完一本書《質數的孤獨》,裡面講到孿生質數,就想查一下孿生質數的分佈情況。其中主要用到了計算質數(素數)的方法,搜了一下,排名前幾的都是用for迴圈來做的,感覺略微麻煩了一些,在比較一些還是覺得用遞迴篩選法來解決這個問題。 新建List<Integer>

groovy使用stream語法遞迴篩選N以內的質數(素數)--附氣泡排序和插入排序練習

本人最近讀完一本書《質數的孤獨》,裡面講到孿生質數,就想查一下孿生質數的分佈情況。其中主要用到了計算質數(素數)的方法,搜了一下,

python用遞迴篩選N以內的孿生質數(孿生素數

本人最近讀完一本書《質數的孤獨》,裡面講到孿生質數,就想查一下孿生質數的分佈情況。其中主要用到了計算質數(素數)的方法,搜了一下,

問題:n以內的所有素數。要求給出自然語言描述的演算法,並且實現演算法。事先分析演算法的時間複雜度和空間複雜度。/*如果錯誤或相關改進的歡迎提出,謝謝!*/

/*2018.10.20上傳,該貼還有部分需要完善,比如2輸不出,還有許多可以優化的地方,未完,待更~~*/ #include <stdio.h> #include <math.h> #include <time.h> void pr

Eratosthenes篩選小於N所有素數個數

求出1~N範圍中所有的素數,在leetcode中做過這個題目,我想從對每個1~N進行一次遍歷,每個數判斷一次是否是素數。 判斷一個數是否是素數的複雜度本身也是挺高的,再進行一次迭代,在leetcode中的結果是超時: class Solution { p

Problem D: C/C++經典程式訓練7---某個範圍所有素數

Problem D: C/C++經典程式訓練7---求某個範圍內的所有素數 Time Limit: 1 Sec  Memory Limit: 64 MB Description 求小於n的所有素數,按照每行10個顯示出來。 Input 輸入整數n

C語言給定範圍所有素數程式碼及解析

問題描述 求給定範圍start〜end之間的所有素數。 問題分析 判定一個整數m是否為素數的關鍵就是要判定整數m能否被除1和它自身以外的任何其他整數所整除,若都不能整除,則m即為素數。 本題求的是給定範圍start〜end之間的所有素數,考慮到程式的通用性,需要從鍵盤上輸入start和end值,例如輸

程式基本演算法習題解析 使用篩選出1~100之內的所有素數

思路:              第一個素數是2,把後面是2的整數倍的數全部篩去,篩去的數置0;從第一個素數2向後找出最小的未被篩去的數3,把它後面是3的整數倍的數全部篩去並置0;重複上述過程,直到新找到的素數大於1

C/C++練習7---某個範圍所有素數 (sdut oj)

C/C++練習7---求某個範圍內的所有素數 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 求小於n的所有素

C語言給定範圍所有素數

問題描述 求給定範圍start〜end之間的所有素數。 問題分析 判定一個整數m是否為素數的關鍵就是要判定整數m能否被除1和它自身以外的任何其他整數所整除,若都不能整除,則m即為素數。本題求的是給定範圍start〜end之間的所有素數,考慮到程式的通用性,需要從鍵盤上輸

1137C/C++經典程式訓練7---某個範圍所有素數

題目描述 求小於n的所有素數,按照每行10個顯示出來。 輸入 輸入整數n(n<10000)。 輸出 每行10個依次輸出n以內的所有素數。如果一行有10個素數,每個素數後面都有一個空格。 示例輸入 100 示例輸出 2 3 5 7 11 13 1

SDUT-1137 C/C++練習7---某個範圍所有素數

Code #include <stdio.h> #include <math.h> int main() { int i,j,n,count; scan

C/C++練習7---某個範圍所有素數

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 #include<stdio.h> #include<math.h> int main() { int i,n,m,count=0; sc

篩選素數

return include main 技術 ret printf int images ima C語言 #include <stdio.h>#include <math.h>int main(){int i,j,a[100],N;scanf("

指定整數範圍素數之和

結束 int else if else 正整數 i++ bre turn exit //求指定整數範圍內的素數之和int getSumResult(int start,int end){ int i,j; int flag=0; int result=0; if(s

【C語言】 利用篩選100以內的素數

演算法思路: 原理很簡單,就是當i是質(素)數的時候,i的所有的倍數必然是合數。如果i已經被判斷不是質數了,那麼再找到i後面的質數來把這個質數的倍數篩掉。 程式碼如下: //C語言 篩選法求100以內的素數 //原理很簡單,就是當i是質(素)數的時候,i的所有的倍數必然是合數。如果i已經

JAVA——出指定範圍所有的質數

求出指定範圍內所有的質數 1.要求 在視窗輸出指定範圍內所有的質數,並對所有輸出的質數個數進行計數。 2.質數 在所有比1大的整數中,除了1和它本身以外,不再有別的因數,這種整數叫做質數或素數。還可以說成質數只有1和它本身兩個約數。 3.原理 具體做法是:先