Pagini recente » Cod sursa (job #2072817) | Cod sursa (job #1596780) | Cod sursa (job #1901718) | Cod sursa (job #2853953) | Cod sursa (job #2578554)
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream f("desc.in");
ofstream g("desc.out");
ll n,k,dp[1005][1005];
vector<pair <ll ,ll> > divizori[1005];
vector<ll> diviz;
void perechidiv(int i)
{
int l=1,r=i;
ll val=diviz[i];
while(l<=r)
{
if(1LL*diviz[l]*diviz[r]==val) {divizori[i].push_back({l,r});l++;r--;}
else
{
if(1LL*diviz[l]*diviz[r]>val) r--;
else l++;
}
}
divizori[i].push_back({i,0});
}
int main()
{
f>>n>>k;
for(int i=1;1LL*i*i<=n;i++)
{
if(n%i==0)
{
if(n/i!=i)
{
diviz.push_back(i);
diviz.push_back(n/i);
}
else
diviz.push_back(i);
}
}
sort(diviz.begin(),diviz.end());
int z=diviz.size();
for(int i=0;i<z;i++)
{
perechidiv(i);
dp[i][i]=1;
}
dp[0][0]=1;
//int z=diviz.size();
for(int i=1;i<z;i++)
{ll sol=0;
//cout<<diviz[i]<<" ";
int m=divizori[i].size();
for(int j=0;j<m;j++)
{///calculcam dp[i][x];
ll val=divizori[i][j].second;
int x=divizori[i][j].first;
int cnt=divizori[val].size();
if(val!=0){
for(int d=cnt-1;d>=0;d--)
{
if(divizori[val][d].first>=x)
{
dp[i][x]+=dp[val][divizori[val][d].first];
}
}
}
sol+=dp[i][x];
}
if(i==z-1){
g<<sol<<'\n';
g<<0;
return 0;
}
}
g<<0;
}