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的倍數的光源操作一次,...