比赛 |
20101101 |
评测结果 |
AAAAAAAAWW |
题目名称 |
整数合并 |
最终得分 |
80 |
用户昵称 |
Eme丶 |
运行时间 |
0.017 s |
代码语言 |
C++ |
内存使用 |
3.86 MiB |
提交时间 |
2012-11-05 09:39:59 |
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#define N 100010
using namespace std;
int tot,l,r,p;
int f[N],a[N],g[N];
void Init()
{
scanf("%d%d%d",&l,&r,&p);
a[0]=0;
for (int i=p;i<=1000;i++)
{
bool b=true;
for (int j=2;j<=i-1;j++)
if (i % j==0)
{
b=false;
break;
}
if (b) a[++a[0]]=i;
}
}
int Get(int x)
{
if (x==f[x]) return x;
f[x]=Get(f[x]);
return f[x];
}
void Union(int x,int y)
{
int fx=Get(x);
int fy=Get(y);
if (fx!=fy)
{
f[fx]=fy;
g[fy]+=g[fx];
tot--;
}
}
void Main()
{
for (int i=1;i<=r;i++) f[i]=i;
for (int i=1;i<=r;i++) g[i]=1;
tot=r-l+1;
for (int i=1;i<=a[0];i++)
{
int lb=(l/a[i]);
if (l % a[i]!=0) lb++;
int rb=(r/a[i])-1;
for (int j=lb;j<=rb;j++) Union(a[i]*j,a[i]*(j+1));
}
printf("%d\n",tot);
}
int main()
{
freopen("setb.in","r",stdin);
freopen("setb.out","w",stdout);
Init();
Main();
fclose(stdin); fclose(stdout);
return 0;
}