題目:
求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...