Given two integers low and high, please calculate the number of Mysterious Numbers between low and high, inclusive.
Input
For each test case, there are two integers low and high in one line separated by spaces. 1 ≤ low ≤ high ≤ 1,000,000Output
Print out the number of Mysterious Numbers between low and high, inclusive.Sample Input
1 10 10 15
Sample Output
4
1
#include<stdio.h>
#include<cstring>
const int num=1000001;
int a[num],b[num];
void f(){
memset(a,0,sizeof(a));
a[1]=1;
for(int i=2;i<num;i++)
{
if(!a[i])
{
a[i]=2;
for(int j=i+i;j<num;j=j+i)
{
a[j]=a[j]+1;
}
}
else
{
a[i]=a[i]+2;
for(int j=i+i;j<num;j=j+i)
a[j]=a[j]+1;
}
}
b[0]=0;
for(int i=1;i<num;i++)
{
if(i%a[i]==0)
b[i]=1;
b[i]=b[i]+b[i-1];
}
}
int main(){
int low,high,r;
f();
while(scanf("%d%d",&low,&high)!=EOF){
printf("%d\n",b[high]-b[low-1]);
}
return 0;
}