比赛 20101101 评测结果 MMMMMMMMMM
题目名称 整数合并 最终得分 0
用户昵称 苏轼 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-11-05 11:29:34
显示代码纯文本
#include <fstream>
using namespace std;
ifstream cin("setb.in");
ofstream cout("setb.out");
int f[20001][20001],a,b,p,lon[20001];
bool zs[100000],cz[100000];
void zhishu()
{
	int i,j;bool f;
	for (i=0;i<=b;i++) {zs[i]=false;cz[i]=true;}
	zs[2]=true;zs[3]=true;
	for (i=5;i<=b;i++)
	{
		f=true;
		for (j=2;j<=i/2;j++)
			if (i%j==0) f=false;
		if (f) zs[i]=true;
	}
}
void init()
{
	int i;
	for (i=1;i<=b-a+1;i++) {f[i][1]=a+i-1;lon[i]=1;}
}
bool keyi(int x,int y)
{
	int i;
	for (i=p;i<=x/2;i++)
	{
		if (x%i==0&&zs[i])
			if (y%i==0) return true;
	}
	return false;
}
void hebing(int x,int y)
{
	int i;
	for (i=1;i<=lon[y];i++)
		f[x][i+lon[x]]=f[y][i];
}
int main()
{
	int i,j,k,l,ans=0;
	cin>>a>>b>>p;
	zhishu();
	init();
	for (i=1;i<=b-a+1;i++)
	{
		if (cz[i])
		{
			for (j=1;j<=lon[i];j++)
				for (k=i+1;k<=b-a+1;k++)
					if (cz[k])
						for (l=1;l<=lon[k];l++)
							if (keyi(f[i][j],f[k][l]))
							{
								cz[k]=false;
								hebing(i,k);
								lon[i]+=lon[k];
								break;
							}
		}
	}
	for (i=1;i<=b-a+1;i++)
		if (cz[i]) ans++;
	cout<<ans<<endl;
	return 0;
}