1. 程式人生 > >洛谷P1876開燈

洛谷P1876開燈

ace spa ++ pan mat col ios mes space

題目描述

有n盞燈,一開始全是關閉的。來n個人,

第一個人把一的倍數的燈開著的關上,關上的打開。

第二個人把二的倍數的燈開著的關上,關上的打開。

第三個人把三的倍數的燈開著的關上,關上的打開。

........

問最後第幾盞燈開著。

題解

寫個暴力發現開著的燈都是小於n的完全平方數啊

證明如下(參考yyb題解):

可知,第n盞燈被操作的次數為n的約數。

n=p1^a1*p2^a2*p3^a3*...

則n約數的個數為

(a1+1)(a2+1)(a3+1)....

若最後某盞燈亮著,那麽它一定被操作了奇數次.

則a1,a2,a3....必為偶數。

n={p1^(a1/2)*p2^(a2/2)*p3^(a3/2)}^2

=m^2

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;

int n,q;

int main(){
    scanf("%d",&n);q=sqrt(n);
    for(int i=1;i<=q;i++)
     cout<<i*i<<" ";
}

洛谷P1876開燈