记录编号 542145 评测结果 AAAAAAAAAA
题目名称 整数合并 最终得分 100
用户昵称 Gravatar能流零念 是否通过 通过
代码语言 C++ 运行时间 0.031 s
提交时间 2019-09-20 21:00:24 内存使用 14.61 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#define n 200005
using namespace std;
int f[n],a,b,p,ans;
bool prime[n];
inline int find(int x)
{
	return (x==f[x])?x:f[x]=find(f[x]);//并查集(状态压缩) 
}
int main()
{
	freopen("setb.in","r",stdin);
	freopen("setb.out","w",stdout);
	cin>>a>>b>>p;
	for(int i=1;i<=b;++i)
		f[i]=i;//并查集初始化 
	for(int i=2;i<=b;++i)
	{
		if(!prime[i])
		{
			for(int j=1;j*i<=b;++j)//E筛:一个质数的倍数都是合数 
			{
				prime[j*i]=1;
				if(i>=p)
					if(j*i>=a&&j*i<=b)
					{
						int fx=find(i),fy=find(j*i);
						if(fx==fy)
							continue;
							if(fx>fy)
								f[fy]=fx;
							else
								f[fx]=fy;
				}
			}
		}
	}
	for(int i=a;i<=b;++i)
		if(f[i]==i)
			ans++;
	cout<<ans;
	return 0;
}