# Number Theory# Square Root# Simulation

d111 - 10110 - Light, more light

🔗 前往 ZeroJudge 原題

題目描述

題目描述了工友來回走廊開關燈泡的過程,要求判斷在走完 n 趟後,編號為 n 的燈泡是亮著還是暗著的。燈泡的狀態取決於被多少次開關控制。

解題思路

一個燈泡的狀態由其編號的因數個數決定。如果因數個數為奇數,則燈泡亮著;如果因數個數為偶數,則燈泡熄滅。完全平方數的因數個數為奇數,而非完全平方數的因數個數為偶數。因此,只需要判斷 n 是否為完全平方數即可。程式碼中直接計算了sqrt(a)並判斷是否相等。

複雜度分析

  • 時間複雜度: O(1)
  • 空間複雜度: O(1)

程式碼

#include <iostream>
#include <cmath>
using namespace std;
int main() 
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    double a=0.0;
    while(cin >> a){
    	if(a==0){
    		return 0;
		}
    	int b=sqrt(a);
    	if(sqrt(a)==b){
    		cout << "yes" << endl;
		}
		else{
			cout << "no" << endl;
		}
	}
}

Discussion