比赛 20120302 评测结果 AAAAAAAAAAA
题目名称 法雷序列 最终得分 100
用户昵称 Truth.Cirno 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-03-02 21:16:49
显示代码纯文本
#include <cstdio>
#include <cstdlib>
using namespace std;

const int su[37]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157};

struct strtype
{
	int zi,mu;
	double num;
}abc[10000];

bool checked(int bnum,int snum)
{
	int i;
	if (bnum%snum==0)
		return(false);
	for (i=0;i<=36&&su[i]<snum;i++)
		if (bnum%su[i]==0&&snum%su[i]==0)
			return(false);
	return(true);
}

void swapstr(strtype &x,strtype &y)
{
	strtype temp;
	temp=x;
	x=y;
	y=temp;
}

void qqsort(int l,int r)
{
	int ll,rr;
	double temp;
	ll=l;
	rr=r;
	temp=abc[rand()%(r-l+1)+l].num;
	while (ll<=rr)
	{
		while (abc[ll].num<temp)
			ll++;
		while (temp<abc[rr].num)
			rr--;
		if (ll<=rr)
		{
			swapstr(abc[ll],abc[rr]);
			ll++;
			rr--;
		}
	}
	if (l<rr)
		qqsort(l,rr);
	if (ll<r)
		qqsort(ll,r);
}

int main(void)
{
	freopen("frac1.in","r",stdin);
	freopen("frac1.out","w",stdout);
	int i,j,n=0,counter=0/*1*/;
	scanf("%d",&n);
	if (n==0)
		return(0);
	if (n==1)
	{
		printf("0/1\n1/1\n");
		return(0);
	}
	printf("0/1\n");
	for (i=2;i<=n;i++)
	{
		abc[counter].zi=1;
		abc[counter].mu=i;
		abc[counter].num=1.0*abc[counter].zi/abc[counter].mu;
		counter++;
		for (j=2;j<i;j++)
			if (checked(i,j))
			{
				abc[counter].zi=j;
				abc[counter].mu=i;
				abc[counter].num=1.0*abc[counter].zi/abc[counter].mu;
				counter++;
			}
	}
//	c--;
	qqsort(0,counter-1);
//	for (i=1;i<c;i++)
//		for (j=1;j<=c-i;j++)
//			if (abc[j].num>abc[j+1].num)
//				swapstr(abc[j],abc[j+1]);
	for (i=0/*1*/;i</*=*/counter;i++)
		printf("%d/%d\n",abc[i].zi,abc[i].mu);
	printf("1/1\n");
	return(0);
}