求 [l
,r] 中有多少素數能寫成 x4
−y4x
3+y3
的形式。
約定:l,r
≤1013
考慮把
x 和
y的最大公約數提出來,設為
d ,把兩數寫為 dx
和 dy ((x
,y)=
1 ),設有素數
p 滿足條件,嘗試化簡原式,: p(
x3+y
3)=d
(x4−
y4)因式分解,可以得到: p(
x2−x
y+y2
)=d(
x−y)
(x2+
y2)
顯然,因子
p 應該在 (x
2+y2
)裡。另一方面,因為 (x
,y)=
1 ,所以有 (x
−y,x
2−xy
+y2)
=1,所以只能有 x−
y=1 。那麼我們繼續化簡,得到: p(
x2+x
+1)=
d(2x
2+2x
+1)
因為 (x2
+x+1
,2x2
+2x+
1)=1
,所以我們可以得到:
,我們從前向後,用小的 ai
去除大的 aj
。 具體地,我們從 i=
1 開始列舉每個 ai
,向後找到它可以整除的所有 aj
,把 aj
裡面的所有 ai
因子除乾淨。
我們斷言,按這樣的演算法處理,列舉到每個 ai
的時候,ai
一定是乙個素數或
1 。
證明:
先奠基,首先 a1
是乙個素數。若
ai是乙個合數,且 ai
中含有兩個不同的質因子時,等價於:
存在不同的兩質數
p ,
q使得
i 是 f(
x)≡0
modp和 f
(x)≡
0modq
的最小正整數解。(如果不是的話,ai
會被之前的 aj
篩掉)
那麼我們有
i且 i,所以: 2i
2+2i
+1矛盾。
因此,每個
i 只可能是最多乙個
p的同餘方程 f(
x)≡0
modp
的最小解。
類似上文的思路,還可以證明如果這樣的
p 存在,那麼 ai
裡 p的次數最大是 1。
如果 a
i 是素數,我們又會用它去篩之後的 aj
,根據迴圈不變式的那一套理論,這個命題應該是成立的。
答案怎麼統計呢?如果列舉到某個 ai
發現 ai
=f(i
) 且 ai
≥l時,就給答案加
1 嘛。
我們設有 m個
≤r的 f(
x),按照上文描述,演算法的複雜度是 o(
m2) 的,可能還會 tle,有優化的餘地嗎?
注意到 f(
x)≡0
modp
當且僅當 f(
x%p)
≡0modp
,而<
p 和 p−
i−1,所以我們根據 a
i 和 i
可以知道它應該去篩哪些數,加上這個優化就可以過了。
複雜度?總比 o(
mlogm)
快,更精確的分析就不會了。
51nod1181 質數中的質數
1181 質數中的質數 質數篩法 sgu基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 如果乙個質數,在質數列表中的編號也是質數,那麼就稱之為質數中的質數。例如 3 5分別是排第2和第3的質數,所以他們是質數中的質數。現在給出乙個數n,求 n的最小的質數中的質數是多少 可...
51nod 1106 質數檢測
傳送門 1106 質數檢測 根據質數的定義,在判斷乙個數n是否是質數時,我們只要用1至n 1去除n,看看能否整除即可。但我們有更好的辦法。先找乙個數m,使m的平方大於n,再用 m的質數去除n n即為被除數 如果都不能整除,則n必然是質數。如我們要判斷1993是不是質數,50 50 1993,那麼我們...
51Nod 1106 質數檢測
1106 質數檢測 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 收藏 關注 給出n個正整數,檢測每個數是否為質數。如果是,輸出 yes 否則輸出 no input 第1行 乙個數n,表示正整數的數量。1 n 1000 第2 n 1行 每行1個數 2 s i 10 9 ...