记录编号 |
542145 |
评测结果 |
AAAAAAAAAA |
题目名称 |
整数合并 |
最终得分 |
100 |
用户昵称 |
能流零念 |
是否通过 |
通过 |
代码语言 |
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;
}