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;
}
沒有留言:
張貼留言