洛谷 P1876 開燈(完全平方數)

2021-09-26 10:48:25 字數 1413 閱讀 8327

題目背景

該題的題目是不是感到很眼熟呢?

事實上,如果***方法,該題的**簡直不能再短。

但是如果你不懂得呢?那。。。(自己去想)

題目描述

首先所有的燈都是關的(注意是關!),編號為1的人走過來,把是一的倍數的燈全部開啟,編號為二的的把是二的倍數的燈全部關上,編號為3的人又把是三的倍數的燈開的關上,關的開起來……直到第n個人為止。

給定n,求n輪之後,還有哪幾盞是開著的。

輸入格式

乙個數n,表示燈的個數和操作的輪數

輸出格式

若干數,表示開著的電燈編號

說明/提示

1<=n<=2^40

數學題!

emmm,怎麼說呢,這道題還真沒毛病,dalao都說用小學奧數就能解出來,然鵝,我不會,我便利了—說多了都是淚

首先,先來了解乙個知識點:

對於每乙個數n,除非它是完全平方數,否則它一定有偶數個因子。因為如果i是n的因子,那麼n/i也一定是n的因子。例如當n=20時,i=4是20的因子,那麼n/i=5也是20的因子,這樣,n的因子都是成對出現的,所以n有偶數個因子。但是,有一種特殊情況,即n/i=i。例如4/2=2。由於i和n/i是同乙個數,算因子只能是乙個,這時n的因子就是奇數個,再把n/i=i變形,得n=i*i,即n是完全平方數,所以只有完全平方數有奇數個因子。

本題思路:

由於燈只有__兩種狀態__(開或關,可模擬於奇數和偶數),而__初始狀態是關__(你問為什麼?一拖鞋拍死你,不好好讀題)的,而每個燈泡如果能被人的編號整除,狀態就會變化。把整個過程看成乙個整體,也就是只有這一盞燈的因數的編號的人,才會按開關,又由於燈的開關按偶數次狀態不變,還是關(起始是關),所以,燈的開關只有按奇數次,才會開。發現問題和上述提到的只有完全平方數有奇數個因子的問題是一樣的,也就是如果燈的編號是完全平方數,那麼它會被按奇數次,最後就是開著的。輸入n輪,所以只需求出<=n的完全平方數就行了。

/*

看了其他題解,很多人已經知道是判斷是否為完全平方數。 但可能還有人不懂為什麼要求完全平方數,可看看我的思路

首先要知道,當乙個數因數的個數為奇數時,燈是亮的

乙個非完全平方數,因數肯定為偶數 例:8:(1,2,4,8)

乙個完全平方數,因數肯定為奇數 例:9:(1,3,9)

其實簡單來說非完全平方數的每乙個因數都可以跟乙個不等自己的數相乘得到這個非完全平方數(18,24);所以因數一定是偶數

完全平方數其中乙個因數乘自己可得到這個完全平方數(19,33);所以因數一定是奇數;

*/#include

//並不用cmath

using namespace std;

intmain()

作者: 落筆映惆悵(洛谷)

怎麼樣,學到了吧?

什麼?就我不知道?

洛谷 P1876 開燈

題目背景 該題的題目是不是感到很眼熟呢?事實上,如果 方法,該題的 簡直不能再短。但是如果你不懂得呢?那。自己去想 題目描述 首先所有的燈都是關的 注意是關!編號為1的人走過來,把是一的倍數的燈全部開啟,編號為二的的把是二的倍數的燈全部關上,編號為3的人又把是三的倍數的燈開的關上,關的開起來 直到第...

洛谷P1876 開燈

題目鏈結 題目背景 該題的題目是不是感到很眼熟呢?事實上,如果 方法,該題的 簡直不能再短。但是如果你不懂得呢?那。自己去想 題目描述 首先所有的燈都是關的 注意是關!編號為 1 的人走過來,把是 1 的倍數的燈全部開啟,編號為 2 的人把是 2 的倍數的燈全部關上,編號為 3 的人又把是 3 的倍...

洛谷p4318 完全平方數

小 x 自幼就很喜歡數。但奇怪的是,他十分討厭完全平方數。他覺得這些數看起來很令人難受。由此,他也討厭所有是完全平方數的正整數倍的數。然而這絲毫不影響他對其他數的熱愛。這天是小x的生日,小 w 想送乙個數給他作為生日禮物。當然他不能送乙個小x討厭的數。他列出了所有小x不討厭的數,然後選取了第 k個數...