1. 程式人生 > >怎麼判斷一個數是否為完全平方數

怎麼判斷一個數是否為完全平方數

在不使用浮點函式sqrt的情況下,我們有一些比較好的演算法:

1.利用恆等式: 1+3+5+7+....+(2*n-1)=n^2

bool isSqrt(int n)
{
for(int i=1;n>0;i+=2) n-=i;
return 0 == n;
}

下面是一些關於完全平方數的數學性質:

對排除完全平方數有一定的加速作用:

性質1:完全平方數的末位數只能是0,1,4,5,6,9。 
性質2:奇數的平方的個位數字為奇數,十位數字為偶數。 
證明 奇數必為下列五種形式之一: 
10a+1, 10a+3, 10a+5, 10a+7, 10a+9 
分別平方後,得 
(10a+1)^2=100+20a+1=20a(5a+1)+1 
(10a+3)^2=100+60a+9=20a(5a+3)+9 
(10a+5)^2=100+100a+25=20 (5a+5a+1)+5 
(10a+7)^2=100+140a+49=20 (5a+7a+2)+9 
(10a+9)^2=100+180a+81=20 (5a+9a+4)+1 
綜上各種情形可知:奇數的平方,個位數字為奇數1,5,9;十位數字為偶數。 
性質3:如果完全平方數的十位數字是奇數,則它的個位數字一定是6;反之,如果完全平方數的個位數字是6,則它的十位數字一定是奇數。 
證明 已知=10k+6,證明k為奇數。因為的個位數為6,所以m的個位數為4或6,於是可設m=10n+4或10n+6。則 
10k+6=(10n+4)=100+(8n+1)x10+6 
或 10k+6=(10n+6)=100+(12n+3)x10+6 
即 k=10+8n+1=2(5+4n)+1 
或 k=10+12n+3=2(5+6n)+3 
∴ k為奇數。 
推論1:如果一個數的十位數字是奇數,而個位數字不是6,那麼這個數一定不是完全平方數。 
推論2:如果一個完全平方數的個位數字不是6,則它的十位數字是偶數。 
性質4:偶數的平方是4的倍數;奇數的平方是4的倍數加1。 
這是因為 (2k+1)=4k(k+1)+1 
(2k)=4 
性質5:奇數的平方是8n+1型;偶數的平方為8n或8n+4型。 
在性質4的證明中,由k(k+1)一定為偶數可得到(2k+1)是8n+1型的數;由為奇數或偶數可得(2k)為8n型或8n+4型的數。 
性質6:平方數的形式必為下列兩種之一:3k,3k+1。 
因為自然數被3除按餘數的不同可以分為三類:3m,3m+1, 3m+2。平方後,分別得 
(3m)=9=3k 
(3m+1)=9+6m+1=3k+1 
(3m+2)=9+12m+4=3k+1 
同理可以得到: 
性質7:不能被5整除的數的平方為5k±1型,能被5整除的數的平方為5k型。 
性質8:平方數的形式具有下列形式之一:16m,16m+1, 16m+4,16m+9。 
除了上面關於個位數,十位數和餘數的性質之外,還可研究完全平方數各位數字之和。例如,256它的各位數字相加為2+5+6=13,13叫做256的各位 數字和。如果再把13的各位數字相加:1+3=4,4也可以叫做256的各位數字的和。下面我們提到的一個數的各位數字之和是指把它的各位數字相加,如果 得到的數字之和不是一位數,就把所得的數字再相加,直到成為一位數為止。我們可以得到下面的命題: 
一個數的數字和等於這個數被9除的餘數。 
下面以四位數為例來說明這個命題。 
設四位數為,則 
= 1000a+100b+10c+d 
= 999a+99b+9c+(a+b+c+d) 
= 9(111a+11b+c)+(a+b+c+d) 
顯然,a+b+c+d是四位數被9除的餘數。 
對於n位數,也可以仿此法予以證明。 
關於完全平方數的數字和有下面的性質: 
性質9:完全平方數的數字之和只能是0,1,4,7,9。 
證明 因為一個整數被9除只能是9k,9k±1, 9k±2, 9k±3, 9k±4這幾種形式,而 
(9k)=9(9)+0 
(9k±1)=9(9±2k)+1 
(9k±2)=9(9±4k)+4 
(9k±3)=9(9±6k)+9 
(9k±4)=9(9±8k+1)+7 
除了以上幾條性質以外,還有下列重要性質: 
性質10:為完全平方數的充要條件是b為完全平方數。 
證明 充分性:設b為平方數,則 
==(ac) 
必要性:若為完全平方數,=,則 
性質11:如果質數p能整除a,但p的平方不能整除a,則a不是完全平方數。 
證明 由題設可知,a有質因數p,但無因數,可知a分解成標準式時,p的次方為1,而完全平方數分解成標準式時,各質因數的次方均為偶數,可見a不是完全平方數。 
性質12:在兩個相鄰的整數的平方數之間的所有整數都不是完全平方數,即若 
n^2 < k^2 < (n+1)^2 
則k一定不是完全平方數。 
性質13:一個正整數n是完全平方數的充分必要條件是n有奇數個因數(包括1和n本身)。