複製鏈接
請複製以下鏈接發送給好友

同構數

鎖定
正整數 n 若是它的平方數的尾部,則稱 n 為同構數。
例如:5的平方數是25,而且 25 的尾部是 5 ,所以 5 就是一個同構數。
中文名
同構數
例    子
1,5,6,25,76,376
討論範圍
正整數集
學    科
數學,計算機

同構數基本概念

同構數是會出現在它的平方數的尾部的正整數。
例如:5是25右邊的數,25是625右邊的數,5和25都是同構數
十進制同構數
以6開頭的同構數有:
6^2=36
76^2=5776
376^2=141376
9376^2=87909376
109376^2=11963109376
7109376^2=50543227109376
87109376^2=7588043387109376
787109376^2=619541169787109376
1787109376^2=3193759921787109376
81787109376^2=6689131260081787109376
40081787109376^2=1606549657881340081787109376

同構數算法程序

找出1至10000之間的全部同構數的C語言程序
方法一:依次比較所檢查的正整數 k 和它的平方數 n 的末尾數字
#include <stdio.h>
int main() {
  int k, n, t;
  for (k =1; k < 10000; k++) {
    t = k;  //臨時保存 k的值(在循環中不能修改k的值)
    n = k * k;
    while(t != 0) { 
      if (n % 10 != t % 10);
         break;
      n = n / 10;
      t = t / 10;
    }
    if(t == 0) 
      printf("%d\t%d\n", k, k * k);
  }
}
方法二:把所檢查的正整數 a 的平方數 b 對 10、100、1000和10000取餘,並與 a 進行比較。
#include <stdio.h>
int main() {
  int a, b;
  for(a = 1; a < 10000; a++) {
    b = a * a;
    if(b % 10 == a || b % 100 == a || b % 1000 == a || b % 10000 == a)
      printf("%d\t%d\n",a, b);
  }
}
方法三:設 i 表示待檢查的數,k 為相應的 10 的倍數,j 為平方數。比較 j 對 k 取餘的結果是否等於 i
#include<stdio.h>

int main() { 
    long i, j, k;
    k = 10;
    for (i = 1;i <= 10000;i++){  //i 為待檢查的數
        if (i == k) 
          k *= 10; 
        j = i * i;
        if(j % k == i)
          printf("%ld\t%ld\n",i,j);
    }
}
找出 1~10000 之間同構數的PASCAL程序:
program isomorph;
var 
  i,j,k:long int;
begin
  k := 10;
  for i := 1 to 10000 do 
  begin
    if i = k then 
      k := k * 10;
      j := i * i;
      if (j mod k) = i then 
        writeln(i:8, j:8);
  end;
end;
1~1000之間的同構數有下面這七個(第二列是它的平方):
1 1
5 25
6 36
25 625
76 5776
376 141376
625 390625