游客 Signup | Login
中文 | En

3428 - 被3整除的组合数(1)

    从整数序列1到300中随便选出3个数,使得这3个数的和能被3整除。请问总共有多少种组合方案?

Input

  不用输入

Output

    直接输出结果,并换行

Examples

Input


                

Output


                

Hint

小学学过:能被3整除的数的各位数字相加的和也能被3整除

Solution C++

/*
2014/11/19 吴成兵于图书馆 
	O157/Z782组合数学及应用P2 
*/
#include<iostream>
#include<cmath>
using namespace std;
int myc(int n,int r){
	if(n==r)return 1;
	if(n==r+1)
//		return myc(n,n-r);
		return n;
	int sum=1;
	for(int i=1;i<=r;i++)
		sum*=(n-i+1)/(i);
//	for(int i=0;i<r;i++)
//		sum*=(n-i)/(i+1);
	return sum;
}
int mya(int n,int r){
	int sum=1;
	for(int i=0;i<r;i++)
		sum*=n-i;
	return sum;
}
int f(int n){
	if(n==0)return 1;
	int s=n;
	while(--n)s*=n;
	return s; 
} 
int main(){
//	freopen("in.txt","r",stdin);
//	freopen("out.txt","w",stdout);
	int n,r;
//	while(cin>>n&&n){//[r,n]区间 1<r<n<=~3333
{n=300;
	r=1;//
		int na=n/3,nb=n%3;
		int ra=(r)/3,rb=(r)%3;
//		cout<<"-------------\n";
//		cout<<f(n)<<" "<<f(r)<<endl; 
//		long long ll1=f(n)
//		cout<<myc(n,r)<<" "<<mya(n,r)<<endl;
////		cout<<f(n)/f(n-r)/f(r)<<" "<<f(n)/f(n-r)<<endl;

//		[1,n] && n%3==0
//		cout<<3*myc(na,3)+(int)pow(na,3)<<endl;

//		[1,n]
		cout<<nb*myc(na+1,3)+(3-nb)*myc(na,3)+(int)pow(na+1,nb)*(int)pow(na,3-nb)<<endl;

//		[r,n] 
		int al,bl,cl;//求a,b,c长度,易错 
		if(rb==0&&nb==0){al=bl=na-ra;cl=na-ra+1;}
		if(rb==1&&nb==0){al=bl=cl=na-ra;}
		if(rb==2&&nb==0){al=na-ra-1;bl=cl=na-ra;}
		if(rb==0&&nb==1){al=na-ra+1;bl=na-ra;cl=na-ra+1;}
		if(rb==1&&nb==1){al=na-ra+1;bl=na-ra;cl=na-ra;}
		if(rb==2&&nb==1){al=bl=cl=na-ra;}
		if(rb==0&&nb==2){al=bl=cl=na-ra+1;}
		if(rb==1&&nb==2){al=bl=na-ra+1;cl=na-ra;}
		if(rb==2&&nb==2){al=cl=na-ra;bl=na-ra+1;}
//		cout<<myc(al,3)+myc(bl,3)+myc(cl,3)+al*bl*cl<<endl;
//		cout<<"-------------\n";
	}
	return 0;
}

Hint

小学学过:能被3整除的数的各位数字相加的和也能被3整除

Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题