題目描述
x博士正在研究一種生物晶元,其邏輯密集度、容量都遠遠高於普通的半導體晶元。
博士在晶元中設計了 n 個微型光源,每個光源操作一次就會改變其狀態,即:點亮轉為關閉,或關閉轉為點亮。
這些光源的編號從 1 到 n,開始的時候所有光源都是關閉的。
博士計畫在晶元上執行如下動作:
所有編號為2的倍數的光源操作一次,也就是把 2 4 6 8 ... 等序號光源開啟
所有編號為3的倍數的光源操作一次, 也就是對 3 6 9 ... 等序號光源操作,注意此時6號光源又關閉了。
所有編號為4的倍數的光源操作一次。
.....
直到編號為 n 的倍數的光源操作一次。
x博士想知道:經過這些操作後,某個區間中的哪些光源是點亮的。
輸入3個用空格分開的整數:n l r (l輸出
輸出1個整數,表示經過所有操作後,[l,r] 區間中有多少個光源是點亮的。
樣例輸入
5 2 3
樣例輸出
2
一:被按了奇數次的燈最後是亮著的。編號為id的燈只會被編號為其約數的光源所影響,因此問題轉化為求 l到r範圍內,約數為奇數的燈編號的數量。
二:這裡有兩條重要的數學公式:
1. 完全平方數的約數個數為奇數個,例如9的約數個數為3,分別為1,3,9;
2. 1-n範圍內的完全平方數個數為 sqrt(n)取整,l 到 r的完全平方數的個數為 sqrt(r) - sqrt(l);
題意從id為2的範圍開始按,也就是不按1,少按了一次,所以問題轉化為求 l到r範圍內,約數為偶數的燈的編號的數量。
三:約數為偶數的燈的編號的數量為 範圍內燈的總數量減去完全平方數的個數。
即 (r - l + 1) - (long long)( sqrt(r) - sqrt(l) );
#include#includeusing namespace std;
typedef long long ll;
int main()
{ ll l,r,n;
cin>>n>>l>>r;
cout<
生物晶元(藍橋)
如題 x博士正在研究一種生物晶元,其邏輯密集度 容量都遠遠高於普通的半導體晶元。博士在晶元中設計了n個微型光源,每個光源操作一次就會改變其狀態,即 點亮轉為關閉,或關閉轉為點亮。這些光源的編號從1 到 n,開始的時候所有光源都是關閉的。博士計畫在晶元上執行如下動作 所有編號為2的倍數的光源操作一次,...
藍橋杯 生物晶元
x博士正在研究一種生物晶元,其邏輯密集度 容量都遠遠高於普通的半導體晶元。博士在晶元中設計了 n 個微型光源,每個光源操作一次就會改變其狀態,即 點亮轉為關閉,或關閉轉為點亮。這些光源的編號從 1 到 n,開始的時候所有光源都是關閉的。博士計畫在晶元上執行如下動作 所有編號為2的倍數的光源操作一次,...
歷屆試題 生物晶元
x博士正在研究一種生物晶元,其邏輯密集度 容量都遠遠高於普通的半導體晶元。博士在晶元中設計了 n 個微型光源,每個光源操作一次就會改變其狀態,即 點亮轉為關閉,或關閉轉為點亮。這些光源的編號從 1 到 n,開始的時候所有光源都是關閉的。博士計畫在晶元上執行如下動作 所有編號為2的倍數的光源操作一次,...