Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:刚学完初等数论额!!!

Posted by jean890915 at 2011-10-10 16:53:27 on Problem 1006
In Reply To:刚学完初等数论额!!! Posted by:jean890915 at 2011-10-10 16:00:40
> 看到这道题,兴奋啊!试试
过了额

//中国剩余定理,根据前段时间写的初等数论中程序改编
#include "iostream"
using namespace std;

typedef struct node
{
	int data;  //除数
	int plus;//余数
	int data1;//衍数
	int data2;//乘率
	int sum;//各总
}number_union;


int main()
{
	int i,j,sum=1,total=0,num=1,day;  //sum最小公倍数,total答数
	number_union a[3];
	a[0].data = 23;
	a[1].data = 28;
	a[2].data = 33;
	for (i=0;i<3;i++)
	{
		cin>>a[i].plus;		//余数
	}
	while(a[0].plus!=-1 && a[1].plus!=-1 && a[2].plus!=-1)
	{
		total=0;sum=1;  //初始化
		for (i=0;i<3;i++)
		{
			sum*=a[i].data;		//最小公倍数
		}
		for (i=0;i<3;i++)
		{
			a[i].data1=sum/(a[i].data);
			for (j=1;j<a[i].data;j++)
			{
				if (j*a[i].data1%a[i].data==1)
				{
					a[i].data2=j;
				}
			}
			a[i].sum=a[i].data1*a[i].data2*a[i].plus;
			total+=a[i].sum;
		}
		total=total%sum;
		cin>>day;
		cout<<"Case "<<num<<": ";
		if (total == 0)
			total = 21252;
		if (total>day)
			cout<<"the next triple peak occurs in "<<total-day<<" days."<<endl;
		else if (total<day)
			cout<<"the next triple peak occurs in "<<total+21252-day<<" days."<<endl;
		else
			cout<<"the next triple peak occurs in "<<21252<<" days."<<endl;
		for (i=0;i<3;i++)
		{
			cin>>a[i].plus;		//余数
		}
		num++;
	}
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator