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

rejudge到崩溃了~~~~~~谁帮个忙?

Posted by star6 at 2007-07-21 14:58:28 on Problem 3243
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<algorithm>
#include<vector>
#include<utility>

__int64		x,y,z,k,base;
std::vector<std::pair<int,int> >	q;

void	init()
{
	int		i;
	__int64	t;	
	
	
	scanf("%I64d %I64d %I64d\n",&x,&z,&k);
	if ((!x)&&(!z)&&(!k))
		exit(0);
	k=(k%z+z)%z;
	
	base=(int)sqrt(z)+1;
	q.clear();
	
	t=1;
	for (i=0;i<base;i++)
	{	
		q.push_back(std::make_pair(t,i));
		t=(t*x)%z;
	}
	
	std::sort(q.begin(),q.end());
}

__int64		mod_exp(__int64	a,__int64	b,__int64	n)
{
	__int64	d;
	
	d=1;
	while ((b>0)&&(a!=1))
	{
		if (b&1) d=(d*a)%n;
		b=b>>1;
		a=(a*a)%n;
	}
	return (d);
}

void	ext_gcd(__int64	a,__int64	b,__int64	&x,__int64	&y,__int64	&d)
{
	__int64	tx,ty;
	
	if (b==0)
	{
		x=1;
		y=0;
		d=a;
		return;
	}
	
	ext_gcd(b,a%b,tx,ty,d);	
	x=ty;
	y=tx-(a/b)*ty;
}

int		find(int		p)
{
	std::vector<std::pair<int,int> >::iterator	t;
		
	t=std::lower_bound(q.begin(),q.end(),std::make_pair(p,-1));
	if ((t==q.end())||((*t).first!=p))
		return(base);
	else
		return((*t).second);
}

bool	starmain()
{
	__int64		a,ty,tx,d,ttt,t;	
	
	for (y=0;y<z;y+=base)
	{
		a=mod_exp(x,y,z);
		ext_gcd(a,z,tx,ty,d);		
		if (k%d==0)
		{
			ttt=z/d;
			tx=((tx*k/d)%ttt+ttt)%ttt;			
				
			if ((t=find(tx))<base)
			{
				y+=t;
				return(true);
			}	
		}
	}	
	
	return(false);
}


int		main()
{
//	freopen("c:\\in.txt","r",stdin);
	
	while (true)
	{			
		init();
		if (starmain())
			printf("%I64d\n",y);
		else
			printf("No Solution\n");
	}
	
	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