四位數車牌 AABB(千位=百位=A,十位=個位=B,A≠B),且為某整數平方。求該車牌號。
AABB = 1000A + 100A + 10B + B = 1100A + 11B = 11(100A + B)
因為是完全平方數,且含因子 11,所以必含 11²=121。
設 AABB = (11k)² = 121k²,則 100A + B = 11k²。
又 1000 ≤ AABB ≤ 9999 → 32 ≤ 11k ≤ 99 → 3 ≤ k ≤ 9。
#include
#include
int main() {
for (int a = 1; a <= 9; a++) { // 千位不能為 0
for (int b = 0; b <= 9; b++) {
if (a == b) continue; // A ≠ B
int plate = 1100 * a + 11 * b; // AABB
int root = (int)sqrt(plate);
if (root * root == plate) {
printf("車牌號: %d%d%d%d = %d²\n", a, a, b, b, root);
}
}
}
return 0;
}
int main() {
for (int k = 32; k <= 99; k++) { // 四位數平方根範圍
int sq = k * k;
int a = sq / 1000; // 千位
int b = (sq / 100) % 10; // 百位
int c = (sq / 10) % 10; // 十位
int d = sq % 10; // 個位
if (a == b && c == d && a != c) { // AABB 且 A≠B
printf("車牌號: %d = %d²\n", sq, k);
}
}
return 0;
}
車牌號: 7744 = 88²
驗證:88² = 7744,符合 A=7, B=4, A≠B。
數學驗譐:7744 = 11 × 704 = 11 × 11 × 64 = 121 × 64 = (11×8)² = 88²。
ABAB 或 ABBA,同理可解。AABBCCDD 完全平方數,需用 long long + 剪枝/數論優化。本題展示了 **數學建模(因式分解縮小搜索空間)+ 程序實現(雙重迴圈/單重迴圈枚舉)**。
關鍵技巧:利用完全平方數的質因數次數均為偶數,快速鎖定 11² 因子,將搜索範圍從 90×10=900 縮減到 7 次平方根檢查。
這是「數學思維服務於編程效率」的經典案例。