JZOJ5458 質數 數論,數學

2021-08-29 12:11:32 字數 1241 閱讀 3218

題目:

求ll

l到rr

r中是質數或是兩個質數之積的數的個數。

首先,觀察最大資料:

l ≤r

≤107

,q≤1

05

l\leq r\leq 10^7,q\leq 10^5

l≤r≤10

7,q≤

105那麼肯定是要離線做的。

肯定是要先篩質數,那麼就用線性篩,不僅得到1

11到r

rr之間的質數,還得到了每個數的最小質因數

那麼對於乙個數xxx

那麼我們可以求出字首和s

ss,s[i

]s[i]

s[i]

表示1

11到r

rr中間有多少符合要求的數。然後o(1

)o(1)

o(1)

回答即可。

時間複雜度:o(1

07

)o(10^7)

o(107)

(固定值,其實是o(r

)o(r)

o(r)

#include

#include

#define n 10000100

#define maxn 10000000

#define ll long long

using

namespace std;

int sum,v[n]

,prime[n]

,s[n]

,l,r,n;

bool isp[n]

;int f;

char c;

intread()

//輸入流

return f;

}int

write

(int x)

//輸出流

void

find()

for(

int j=

1;j<=sum;j++)}

for(

int i=

2;i<=maxn;i++)if

(isp[i]

||isp[i/v[i]])

//符合要求

s[i]

=s[i-1]

+1;else s[i]

=s[i-1]

;}intmain()

return0;

}

計數質數 數學

統計某個範圍內的素數,最簡單的方法就是暴力解法。int index 0 for int i 2 i 12 i if flag system.out.println index 面對比較大的範圍時,暴力解法效率就很慢了,這時我們該採用厄拉多塞篩法。宣告乙個最大範圍的布林型別陣列,判斷這一位上有沒有被標...

數學 數論 質數處理

定義 乙個數的因數只有1和本身,那麼這個數是質數。質數的判斷 乙個數n如果不是質數那麼在2 sqr t n sqrt n 一定有他的因子,於是 bool isprime int n else return false 但是在大量元素中,比如1 1 e61 1e6中的質數,再用上面的樸素演算法,就有些...

jzoj4900 完全平方數 數論

選1到n的數中的若干個,組成乙個最大的完全平方數。首先我們把合數都先選上,因為我們可以通過選質數來使它變成完全平方數,分解質因數後看指數的奇偶性就可以了。include include define ll long long define fo i,j,k for int i j i k i def...