Idea: Find Out the number of divisors(NOD) using prime factorization.Use Seive for finding prime number upto sqrt(10^9).
Code First Then See Solution
Code:
#include <bits/stdc++.h>
using namespace std;
#define mx 3200
int a[mx+10];
vector <int> v;
void seive()
{
memset(a,0,sizeof(a));
for(int i=2;i<=sqrt(mx);i++)
{
if(a[i]==0)
{
for(int j=i*i;j<=mx;j+=i)
a[j]=1;
}
}
v.push_back(2);
for(int i=3;i<=mx;i+=2)
{
if(a[i]==0)
v.push_back(i);
}
}
int main()
{
int a,b,n;
seive();
cin>>a>>b>>n;
int res=0,sum;
for(int i=a;i<=b;i++)
{
int temp=i;
sum=1;
for(int j=0;j<v.size()&&v[j]<=sqrt(temp);j++)
{
if(temp%v[j]==0)
{
int cnt=0;
while(temp%v[j]==0)
{
cnt++;
temp/=v[j];
}
sum*=(cnt+1);
}
}
if(temp!=1)
{
sum*=2;
}
if(sum==n)
res++;
}
cout<<res<<endl;
return 0;
}
No comments:
Post a Comment