1. 程式人生 > 其它 >[藍橋杯]生物晶片 (Python 實現)

[藍橋杯]生物晶片 (Python 實現)

技術標籤:algorithmpythonalgorithm

題目:

X博士正在研究一種生物晶片,其邏輯密集度、容量都遠遠高於普通的半導體晶片。
博士在晶片中設計了 n 個微型光源,每個光源操作一次就會改變其狀態,即:點亮轉為關閉,或關閉轉為點亮。
這些光源的編號從 1 到 n,開始的時候所有光源都是關閉的。
博士計劃在晶片上執行如下動作:
所有編號為2的倍數的光源操作一次,也就是把 2 4 6 8 … 等序號光源開啟
所有編號為3的倍數的光源操作一次, 也就是對 3 6 9 … 等序號光源操作,注意此時6號光源又關閉了。
所有編號為4的倍數的光源操作一次。

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

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

輸入

3個用空格分開的整數:N L R (L<R<N<10^15) N表示光源數,L表示區間的左邊界,R表示區間的右邊界。

輸出

輸出1個整數,表示經過所有操作後,[L,R] 區間中有多少個光源是點亮的。

樣例輸入

5 2 3

樣例輸出

2

最開始自己在vscode中寫的程式碼,但是在網站上提交 超出了限制。。但是示例是能通過的。

n,l,r=100,50,84
light=[-1]*(r-l+1)#-1代表燈泡熄滅,+1代表燈泡被點亮
for a in ran+ge(2,n1):
    for b in
range(l,r+1): c=b if c%a==0: light[b-l]*=(-1) print(light.count(1))

然後看了題解,但是沒想明白為什麼出現當前燈泡編號的開平方根再平方不同時當前的燈泡最後就處於點亮的狀態。
math模組中的sqrt(x)**2,有的數字是會不等於自己的。比如當x==7的時候。↓↓↓

import math
print(math.sqrt(7)**2)

執行結果:在這裡插入圖片描述
然後就手動弄了一下示例實驗了一下,確實有這麼一個規律
分別是5個燈泡和7個燈泡的。

0代表熄滅,1代表點亮
00000
01010
01110
01100

01101
最後別點亮的燈泡的編號是2,3,5

0000000
0101010
0111000
0110000
0110100
0110110
0110111
最後別點亮的燈泡的編號是2,3,5,6,7

import math 
N,L,R = map(int,input().split())
count = 0
for i in range(L,R+1):
    if int(math.sqrt(i))**2 != i:
        count += 1
print(count)