藍橋杯 生物晶元 思維

2021-09-17 21:33:27 字數 1362 閱讀 3822

x博士正在研究一種生物晶元,其邏輯密集度、容量都遠遠高於普通的半導體晶元。

博士在晶元中設計了 n 個微型光源,每個光源操作一次就會改變其狀態,

即:點亮轉為關閉,或關閉轉為點亮。

這些光源的編號從 1 到 n,開始的時候所有光源都是關閉的。

博士計畫在晶元上執行如下動作:

所有編號為2的倍數的光源操作一次,也就是把 2 4 6 8 ... 等 序號光源開啟

所有編號為3的倍數的光源操作一次, 也就是對 3 6 9 ... 等序號光源操作,注意此時6號光源又關閉了。

所有編號為4的倍數的光源操作一次。

.....

直到編號為 n 的倍數的光源操作一次。

x博士想知道:經過這些操作後,某個區間中的哪些光源是點亮的。

【輸入格式】

3個用空格分開的整數:n l r  (l例如:

輸入:

5 2 3

程式應該輸出:

2再例如:

輸入:

10 3 6

程式應該輸出:

3資源約定

峰值記憶體消耗 < 256m

cpu消耗  < 1000ms

解題思路

1e15,一層for都寫不了,一看就是個思維題。

對某個光源操作為奇數次,則此光源最終亮,反之。

那麼,我們如何判斷在給定的區間 [ l ,  r ] 裡有多少個光源操作次數為奇數次呢? 對第i個光源的操作次數即為i的因子個數加上他本身,又因為是從2開始的,不包含1,因此編號的因子個數+1-1為奇數的光源最終亮著。 分析發現,僅有完全平方數的因子個個數為偶數,即因子個數+1-1為偶數,這些數對應的燈最終是熄滅的, 所以亮著的光源數 = 光源總數 - 熄滅的光源數(完全平方數的個數)。 光源總數為r-l+1,那麼這個區段裡有多少完全平方數呢,很簡單,如果我們把 [ l , r ]這個去區間裡的所有數開根號,這些數必然 ∈ [sqrt(l), sqrt(r)] ,對於這各區間裡的每乙個整數,必有乙個完全平方數與之對應,因此 完全平方數個數tot即為 (int)sqrt(r) - (int)sqrt(l),  最後判斷l是不是完全平方數,如果是,tot++。

**

#include using namespace std;

typedef long long ll;

ll n,l,r;

int main()

藍橋杯 生物晶元

x博士正在研究一種生物晶元,其邏輯密集度 容量都遠遠高於普通的半導體晶元。博士在晶元中設計了 n 個微型光源,每個光源操作一次就會改變其狀態,即 點亮轉為關閉,或關閉轉為點亮。這些光源的編號從 1 到 n,開始的時候所有光源都是關閉的。博士計畫在晶元上執行如下動作 所有編號為2的倍數的光源操作一次,...

藍橋杯 生物晶元 Python

題目 x博士正在研究一種生物晶元,其邏輯密集度 容量都遠遠高於普通的半導體晶元。博士在晶元中設計了 n 個微型光源,每個光源操作一次就會改變其狀態,即 點亮轉為關閉,或關閉轉為點亮。這些光源的編號從 1 到 n,開始的時候所有光源都是關閉的。博士計畫在晶元上執行如下動作 所有編號為2的倍數的光源操作...

生物晶元(藍橋)

如題 x博士正在研究一種生物晶元,其邏輯密集度 容量都遠遠高於普通的半導體晶元。博士在晶元中設計了n個微型光源,每個光源操作一次就會改變其狀態,即 點亮轉為關閉,或關閉轉為點亮。這些光源的編號從1 到 n,開始的時候所有光源都是關閉的。博士計畫在晶元上執行如下動作 所有編號為2的倍數的光源操作一次,...