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

用10进制tle,换成1000终于过了,860ms,代码未加优化,还是混些的有点乱

Posted by TSERROF at 2012-08-17 14:51:21 on Problem 2635
#include<iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
using namespace std;
char num[10001];
int L,sum,t,cnt,number[101];
#define MAX 1000100
int prime[MAX];
bool a[MAX];
void Prime()
{
	int num = 0, i, j;
	for(i = 2; i < MAX; ++i) 
	{
		if(!(a[i])) prime[num++] = i;
		for(j = 0; (j<num && i*prime[j]<MAX); ++j) 
		{
			a[i*prime[j]] = 1;
			if(!(i%prime[j])) break;
		}
	}
}
bool judge(int x)
{
	int s=0;
	for(int i=cnt/3;i>=0;--i)
	{
		s=(s*1000+number[i])%x;
	}
	if(s==0)return true;
	else return false;
}
int main()
{
	Prime();
	while(scanf("%s%d",&num,&L)!=EOF)
	{
		if(L==0)break;
		cnt=strlen(num);
		int tail=cnt-1;
		for (int i=0;i<=cnt/3;++i)
		{
			number[i]=num[tail]-'0'+(num[tail-1]-'0')*10+(num[tail-2]-'0')*100;
			tail-=3;
			if(tail==-1)break;
			else if(tail==0)
			{
				number[++i]=num[tail]-'0';
				break;
			}
			else if(tail==1)
			{
				number[++i]=(num[tail]-'0'+(num[tail-1]-'0')*10);
				break;
			}
		}
		int i=0,ans=0;
		while(prime[i]<L)
		{
			sum=0,t=0;
			if(judge(prime[i]))
			{
				ans=prime[i];
				break;
			}
			++i;
		}
		if(ans)cout<<"BAD "<<ans<<endl;
		else cout<<"GOOD\n";
		cnt=0;
	}
	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