YbtOJ20001 立方數差

2022-02-14 05:23:04 字數 2255 閱讀 3093

小w又來氵題解啦~~

戳這裡給出乙個質數 ,要求你判斷這個質數是否是兩個立方數的差,即判斷是否存在正整數\(a,b\)滿足\(a^3-b^3=p\)。

從檔案cubicp.in中讀入資料。

多組資料。

第一行給出乙個\(t\) ,表示有\(t\)組資料。

接下來\(t\)行,每行乙個質數\(p\)。

輸出到檔案cubicp.out中。

輸出\(t\)行,對於每個數如果是立方差數,輸出yes,否則輸出no

對於\(30\%\)的資料,\(2≤p≤100\);

對於\(60\%\)的資料,\(2≤p≤10^6\)

對於\(100\%\)的資料\(2≤p≤10^\),\(1≤t≤100\),並且保證每個\(p\)均為質數。

看了這道題……很明顯,這是一道數學題(你這不是廢話嗎)。

首先,這裡有乙個立方差。

由立方差公式:\(a^3-b^3=(a-b)(a^2+ab+b^3)\)

可得:\(p=a^3-b^3=(a-b)(a^2+ab+b^3)\) (字母都一樣啊喂!)

∵ \(p\) 為質數

∴ \((a-b)=1\)

這裡小w解釋一下:因為題目中已經說\(p\)是質數了,所以\((a-b)\)和\((a^2+ab+b^2)\)肯定有乙個為\(1\)(要是有其他的就不是質數了對吧)

而要是\((a^2+ab+b^2)=1\)的話,我們就會明顯地發現:\(a^3-b^3=a-b\)

明顯不成立

所以這裡只能讓\((a-b)=1\)了

接著繼續:

∴ \(b=a-1\)

這個也不用多說了吧?簡易方程五年級下學期謝謝。

然後我們就只需要列舉乙個\(a\)到\(\frac\)。因為\(p\)最大為\(10^\),所以這裡也就是\(10^6\)。

這樣的話,單次時間複雜度為\(o(\frac)\),總共為\(o(\frac)\)

貼下**:

#include using namespace std;

long long p;

long long t;

bool flag;

inline long long read()

while (ch >= '0' && ch <= '9')

return x * f;

}int main()

}if (flag == true)

continue;

printf("no\n");

}return 0;

}

但是!這還遠遠沒有完。雖然剛剛我們的時間複雜度已經可以通過這道題了,但我們可以把單次時間壓縮為\(o(1)\)!

這個想法來自於lmt(%%%),他寫出了比標程還快的程式!

剛剛我們已經推到了\(p=(a^2+ab+b^2)\),並且\(b=a-1\)

那麼\(p=(a^2-2ab+b^2+3ab)\)

由完全平方公式\(a^2-2ab+b^2=(a-b)^2\)

可得:\(p=(a-b)^2+3ab\)

∵ \((a-b)=1\)

∴ \(p=1+3ab\)

∵ \(b=a-1\)

∴ \(p=1+3a(a-1)\)

這樣的話,如果\((p-1)%3≠0\),也就是說\(p-1\)並不是\(3\)的倍數,這就意味著這個肯定不成立,可以直接輸出no

若成立,那麼\(p=3a(a-1)\)

那麼\(\lfloor \sqrt \rfloor=a-1\)

那麼有人就一臉懵逼了:

這是什麼鬼操作???

首先,我們已知\(p=a(a-1)\)

那麼\((a-1)<\sqrt<a\)

此時\(\lfloor \sqrt \rfloor=a-1\)

還可以得出\(\lfloor \sqrt \rfloor +1=a\)

這樣,我們就無須列舉\(a\),成功把時間降到線性。單次時間複雜度\(o(1)\),總共為\(o(t)\)

#include #include #include using namespace std;

int n;

long long p;

int main() else else }}

return 0;

}

至此,這篇題解就氵完了

雷達裝置 Ybtoj

有n nn個建築物,第i ii個建築物在笛卡爾座標系上的座標為 xi yi x i,y i xi y i 你需要在x xx軸上安裝一些雷達,每個雷達的偵察半徑均為d dd,要求每個建築物都至少被乙個雷達偵測到,求最少要安裝幾個雷達。第一行兩個正整數n,d n,dn,d。接下來n nn行,第i ii行...

YBTOJ 電路維修

思路 乍一看這題,沒有bfs的頭緒 但是,我們想到了spfa 我們可以把地圖中的每個點看成方格,這樣就有 n 1 m 1 個方格 如果兩點之間有線聯通,那它們之間的邊權就是0,否則就為1 然後spfa就可以了 include include include using namespace std i...

YBTOJ 守衛挑戰

有 n 項任務,有乙個數 k 每一項任務成功的概率是 p i 這裡與原題目不同,原題目是百分之 p i 這裡相當於 p i frac 成功後會使 k 加上 a i 問至少成功 l 次且最後 k leq0 的概率是多少。資料範圍 0 leq k leq2000,0 leq l leq n leq 20...