百钱百鸡
百钱买百鸡问题:公鸡五文钱一只,母鸡三文钱一只,小鸡三只一文钱,用 100 文钱买 100 只鸡,公鸡、母鸡、小鸡各买多少只?
本程序要求解的问题是:给定一个正整数 n,用 n 文钱买 n 只鸡,问公鸡、母鸡、小鸡各买多少只?
输入格式 输入一个正整数 n。
输出格式 如果有解,输出有多少种解(可以用正整数表示的解)。
如果无解,输出"No Answer."。 数据范围: 1<=n<=1e18
解析
由已知条件列方程组:
x+y+z=n (1)
5x+3y+z/3=n => 15x+9y+z=3n (2)
(2)-(1)得
14x+8y=2n => 7x+4y=n
7x+4y=1 => 扩展的欧几里德算法得到一个特解 x=-1 y=2
7x+4y=n =>通解:
x=-n+4t
y=2n-7t (t为任意整数)
x >= 0,y>=0 => n/4=<t<=2*n/7 (只用找出整数t个数就行)
#include<iostream>
using namespace std;
long long res;
int main()
{
unsigned long long n;
cin>>n;
long long l;
if(n % 4 == 0)
l = n/4;
else
l = n/4 + 1;
long long r = 2*n/7;
res = r - l + 1;
if(res <= 0)
cout<<"No Answer."<<endl;
else
cout<<res<<endl;
return 0;
}