一.小知识点
1.调用幂函数<math.h> pow(x,y)
2.取模:%
二.题目
三.实现的注意
1.求三个等价类的数量的时候可以直接➗N,通过余数来求。(余0则三个等价类数量相等,余1则【1】多一个(+1);余2则【1】多一个(+1),【2】多一个(+1))
2.long long 与 int 的范围
(1)各种类型的输入输出??????
3.小技巧
(1)为了防止爆int,将a,b,c都定义为long long int(因为后面有a*b*c,int*int还是int)
(2)进行a*b*c时先分开取模
四.代码
//三个数和 为 三的倍数有几种情况
#include <stdio.h>
#include <math.h>
int main()
{
long long int N,i,j,k;
long long int result;
long long int mod=pow(10,9)+7;
while(1){
scanf("%lld",&N);
if(N==0) break;
long long int a=0,b=0,c=0;
long long int flag=N%3,f=N/3;
if(flag==0){
a=f;
b=f;
c=f;
}
else if(flag==1){
a=f+1;
b=f;
c=f;
}
else if(flag==2){
a=f+1;
b=f+1;
c=f;
}
// printf("%d,%d,%d\n",a,b,c);
i=a*(a-1)*(a-2)/(3*2)%mod;
j=b*(b-1)*(b-2)/(3*2)%mod;
k=c*(c-1)*(c-2)/(3*2)%mod;
result=i+j+k+(a*b)%mod*(c%mod);
printf("%lld\n",result%mod);
}
return 0;
}