x国要参加同盟阅兵活动。
主办方要求每个加盟国派出的士兵恰好能组成 2 个方阵。
x国发现弱小的 y国派出了130人的队伍,他们的士兵在行进中可以变换2种队形:
130 = 81 + 49 = 9^2 + 7^2
130 = 121 + 9 = 11^2 + 3^2
x国君很受刺激,觉得x国面积是y国的6倍,理应变出更多队形。
于是他发号施令:
我们要派出一支队伍,在行进中要变出 12 种队形!!!
手下人可惨了,要忙着计算至少多少人才能组成 12 种不同的双方阵。
请你利用计算机的优势来计算一下,至少需要多少士兵。
(ps: 不要失去信心,1105人就能组成4种队形了)
注意,需要提交的是一个整数,表示至少需要士兵数目,不要填写任何多余的内容。
答案:
#include <iostream> #include <cstdlib> #include <cstdio> #include <cmath> using namespace std; int num[2000000],m = 2000000; int main() { for(int i = 1;i < 1000;i ++) { for(int j = i;j < 1000;j ++) { int d = i * i + j * j; num[d] ++; if(num[d] >= 12) m = min(m,d); } } printf("%d ",m); for(int i = 1;i * i * 2 <= m;i ++) { int d = (int)sqrt(m - i * i); if(d * d == m - i * i) { printf("%d^2 + %d^2 = %d ",i,d,i * i + d * d); } } }