由 :
a+b=m1*k;
b+c=m2*k;
a+c=m3*k;
可以推到:r=m*k/2;(r=a,b,c);
这个说明如果k是odd,则r必是k的倍数;
若k为even,则r必是k/2或k的倍数,当r为k/2的倍数时,只能和k/2的倍数组合。
AC code:
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long LL;
int main()
{
int n,m;
LL sum_even,sum_odd,mul;
while(cin>>n>>m)
{
sum_even=sum_odd=0;
for(int i=1;i<=2*n;++i)
{
mul=(LL) i*m;
if(mul%2==1)continue;
if(mul/2>n)break;
if(mul/2%m==0)++sum_even;//统计r为m的倍数的数量。
else ++sum_odd;//统计r为m/2的倍数的数量
}
cout<<sum_odd*sum_odd*sum_odd+sum_even*sum_even*sum_even<<endl;
}
}