Pagini recente » Cod sursa (job #1587852) | Cod sursa (job #2141325) | Cod sursa (job #4189) | Cod sursa (job #2129246) | Cod sursa (job #470043)
Cod sursa(job #470043)
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
#define file_in "desc.in"
#define file_out "desc.out"
#define nmax 3000
int k,nrd;
long long n;
long long d[nmax];
int a[nmax][nmax];
void citire()
{
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%lld %d", &n, &k);
}
int cauta(long long x)
{
int i,step;
for (step=1;step<=nrd;step<<=1);
for (i=0;step;step>>=1)
if (i+step<=nrd && d[i+step]<=x)
i+=step;
return i;
}
void solve()
{
long long i;
int j,poz,k;
nrd=0;
for (i=1;i*i<n;++i)
if (n%i==0)
{
d[++nrd]=n/i;
d[++nrd]=i;
}
if (i*i==n)
d[++nrd]=i;
sort(d+1,d+nrd+1);
// printf("%d\n", nrd);
//for (i=1;i<=nrd;++i)
// printf("%lld ", d[i]);
for (i=2;i<=nrd;++i)
{
for (j=2;j<=i;++j)
{
a[i][j]=a[i][j-1];
if (d[i]%d[j]) continue;
poz=cauta(d[i]/d[j]);
if (j<=poz)
a[i][j]+=a[poz][poz]-a[poz][j-1];
}
a[i][i]=a[i][i-1]+1;
}
printf("%d\n", a[nrd][nrd]);
}
int main()
{
citire();
solve();
fclose(stdin);
fclose(stdout);
return 0;
}