交大OJ 求素數個數 1783和 2110

2021-06-22 18:56:14 字數 2512 閱讀 6988

problem d:素數的個數

time limit:1000ms  memory limit:65536k

total submit:183 accepted:28

description

數論是數學的乙個重要分支,素數是研究數論的重要課題之一。 

現在,你需要完成乙個任務,就是尋找區間 [a,b]中素數的個數?是不是很簡單,我想你一定會體會到素數的美麗的~

input

每一組測試資料報括一行; 

每一行包含兩個數字 a 和 b,其中有 1 < a < b < 2^31,輸入資料保證a、b 之間的差值不超過 1000000。

output

對於每一組測試資料,輸出區間 [a,b]中素數的個數。

超時**:

#include #include#includeusing namespace std;

int num[5205];

bool p[50005];

int cnt=0;

void prime()

int isprime(int x)

int main()

}printf("%d\n",ans);

}return 0;

}

2110題和上面有異曲同工之妙!

題目:

求區間[a,b]的素數個數。

0<=a,b<=10^8

分段篩法+二分搜尋。首先預處理出區間[1, 10^8]中的所有素數,然後對於查詢區間[a, b],只需要用區間[1, b]中的素數個數減去區間[1, a - 1]中的素數個數,顯然可以二分得到。在篩選素數的過程中,並不是直接篩,而是採用分段篩法,即將區間[1, 10^8]劃分為50個不相交的等長區間,分別篩選即可。

**如下:

//#define spj

#ifdef spj

#include #else

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

#endif

#define dbg(x) cout << #x << " = " << x << endl

#define dbg2(x,y) cout << #x << " = " << x << ", " << #y << " = " << y << endl

#define dbg3(x,y,z) cout << #x << " = " << x << ", " << #y << " = " << y << ", " << #z << " = " << z << endl

#define out(x) cout << (x) << endl

#define out2(x,y) cout << (x) << " " << (y) << endl

int prime[6000000]; // n=10^8以內最多 有n/ln(n)個素數

int tot_prime = 0;

bool vst[2000000 + 10];

void get_prime_1(int m)

for(i = 1; i <= m; i ++)

if( !vst[i] )

prime[tot_prime ++] = (i << 1) | 1;*/

int i, j;

memset(vst, 0, sizeof(vst));

for(i = 3; i <= m; i += 2)

}void get_prime_2(int l, int r)

for(i = l; i <= r; i ++) */

memset(vst, 0, sizeof(vst));

int i, j;

for(i = 0; prime[i] * prime[i] <= r; i ++)

for(i = l; i <= r; i ++)

}}void init()

//dbg(tot_prime);

}int main()

n = a - 1;

l = 0, r = tot_prime - 1, pos_2 = -1;

while( l <= r )

printf("%d\n", (pos + 1) - (pos_2 + 1));

}return 0;

}

求素數個數

我最近在leetcode上擼了乙個小演算法,雖然已經工作了五年,當看到每次 提交後排名的提公升,內心依然很有成就感。題目比較簡單,求小於n的素數個數,素數也叫質數,具有以下特點 根據上面的特點,我們還可以推斷出 依據這一點,我們可以寫出下面的實現 class solution intcount 1 ...

MPI求素數個數

附上另乙個呼叫函式後針對乙個輸入正確 include stdafx.h include mpi.h include stdio.h include string.h include math.h int isprime int n return flag int main int argc,char...

48 求質數 素數 個數

48 求質數 素數 個數 問題描述 求出所有的大於等於n小於等於m的質數,統計其數目。n m 輸入說明 你的程式需要從標準輸入裝置 通常為鍵盤 中讀入多組測試資料。每組一行,每行包含兩個整數n m n m都不大於20000 兩組資料之間沒有多餘的空行。在行首和行尾沒有多餘的空格。輸出說明 對每組測試...