2014年7月15日 星期二

uva 10110 Light, more light

blub 的開關被操作偶數次,最後會是關閉的,被操作奇數次,最後會是開啟的。

當發現數字的其中一個因數時,通常是成對出現的,除了完全平方數,所以只有完全平方數

是的因數會是奇數。

判斷是否為完全平方數時,因為 sqrt 回傳的是 double,如果用 int 的變數接的話,會有誤差

(用 int 是為了用 % 看此數的平方根數否為此數的因數),所以用 floor 和 ceil 確認,如果兩個

值相等,表示是完全平方數。

(本來一開始是從 1 到數字的平方根之間找因數,計算因數的個數,但是造成 TLE,floor 和 ceil 方法學習自 : http://acm.uva.es/board/viewtopic.php?f=10&t=10656&p=128846&hilit=10110&sid=48865e44dcc662d2e49822799291e900#p110511)


#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(void){
    double num;

    while(scanf("%lf",&num)!=EOF){
        if(!num) break;

        if( floor(sqrt(num)) == ceil(sqrt(num)) ){
            printf("yes\n");
        }else{
            printf("no\n");
        }
    }

    return 0;
}

沒有留言:

張貼留言