#include <iostream>
using namespace std;
int p,q,a,n,ans;
int gcd(int x,int y)
{
return x%y==0?y:gcd(y,x%y);
}
int lcm(int x,int y)
{
return x/gcd(x,y)*y;
}
void dfs(int cur,int pre,int up,int down,int product)
{
for(int i=pre;i*product<=a;++i){
int k=lcm(down,i);
int t1=k/down*up;
int t2=k/q*p;
if(t2>t1+k/i*(n-cur+1))
return ;
if(t2==t1+k/i)
++ans;
else if(t2>t1+k/i&&cur<n)
dfs(cur+1,i,t1+k/i,k,product*i);
}
}
int main()
{
while(scanf("%d%d%d%d",&p,&q,&a,&n)==4){
if(p==0&&q==0&&a==0&&n==0)
break;
ans=0;
dfs(1,1,0,q,1);
printf("%d\n",ans);
}
return 0;
}
poj 1980 Unit Fraction Partition 深搜剪枝
最新推荐文章于 2019-07-09 15:12:00 发布