埃及分数(迭代深搜)
Posted 719666a
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了埃及分数(迭代深搜)相关的知识,希望对你有一定的参考价值。
#include<bits/stdc++.h> using namespace std; long long ch,mo; int dep; long long ans[1000],s[1000]; int gcd(long long a,long long b) { return b==0?a:gcd(b,a%b); } void outp() { if(ans[dep]>s[dep]) { for(int i=1;i<=dep;i++) ans[i]=s[i]; } } void dfs(long long zi,long long mu,int d) { long long a,b,w; if(d==dep) { s[d]=mu; if((zi==1)&&s[d]>s[d-1]) outp(); return; } for(int i=max(s[d-1]+1,mu/zi+1);i<(dep-d+1)*mu/zi;i++)//此步骤着重理解, { // 由上一步和dep深度决定i的取值范围 b=mu*i/gcd(mu,i); a=b*zi/mu-b/i; w=gcd(a,b); a/=w;b/=w; s[d]=i; dfs(a,b,d+1); } } int main(){ scanf("%lld%lld",&ch,&mo); int i=gcd(ch,mo); ch/=i; mo/=i; for(dep=2;;dep++) { ans[1]=0; s[0]=0; ans[dep]=200000000; dfs(ch,mo,1); if(ans[1]!=0) break; } for(int j=1;j<=dep;j++) { printf("%d ",ans[j]); } return 0; }
以上是关于埃及分数(迭代深搜)的主要内容,如果未能解决你的问题,请参考以下文章