比赛 20101101 评测结果 AAAAAAAAAA
题目名称 整数合并 最终得分 100
用户昵称 kaaala 运行时间 0.016 s
代码语言 C++ 内存使用 3.63 MiB
提交时间 2012-11-05 09:28:28
显示代码纯文本
#include<iostream>
#include<fstream>

using namespace std;

int ans,a,b,p,fa[100006];
bool f[100006];

int gf(int c)
{
	if(fa[c]==c)
		return c;
	return fa[c]=gf(fa[c]);
}

void pd(int a,int b)
{
	int faa=gf(a),fbb=gf(b);
	fa[fbb]=faa;
}

void gcd()
{
	int i,j;
	bool fl[100006];
	for(i=2;i<=b;i++)
		fl[i]=true;
	for(i=2;i<p;i++)
		if(fl[i])
			for(j=i+i;j<=b;j+=i)
				fl[j]=false;
	for(i=p;i<=b;i++)
		if(fl[i])
			for(j=i+i;j<=b;j+=i)
			{
				fl[j]=false;
				pd(i,j);
			}
}

int main()
{
	int i,j;
	ifstream fin("setb.in");
	ofstream fout("setb.out");
	fin>>a>>b>>p;
	for(i=1;i<=b;i++)
		fa[i]=i;
	gcd();
	for(i=a;i<=b;i++)
	{
		j=gf(i);
		if(!f[j])
		{
			f[j]=true;
			ans++;
		}
	}
	fout<<ans<<endl;
	fin.close();
	fout.close();
	return 0;
}