我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么用Python求解阿基米德分牛问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么用Python求解阿基米德分牛问题

今天小编给大家分享一下怎么用Python求解阿基米德分牛问题的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

题目大意

 太阳神有一牛群,由白、黑、花、棕四种颜色的公、母牛组成,其间关系如下,求每种牛的个数。

公牛中,白牛多于棕牛,二者之差为黑牛的1/2+1/3;黑牛多于棕牛,二者之差为花牛的1/4+1/5;花牛多于棕牛,二者之差为白牛数的1/6+1/7

母牛中,白牛是全体黑牛的1/3+1/4;黑牛是全体花牛的1/4+1/5;花牛是全体棕牛的1/5+1/6;棕牛是全体白牛的1/6+1/7

如果用字母x0,x1, x2 , x3分别表示白、黑、花、棕各色的公牛数;用y0,y1,y2,y3分别表示白、黑、花、棕各色母牛数,则得8 个未知数的如下7 个方程

怎么用Python求解阿基米德分牛问题

这个题其实是毫无难度的,但非要用Python,那么难点主要如何优雅地表达这个过程,这里选用的是sympy符号计算。

所以第一步,先给定一些符号

import sympyx0,x1,x2,x3 = sympy.symbols("x0,x1,x2,x3")y0,y1,y2,y3 = sympy.symbols("y0,y1,y2,y3")x = [x0,x1,x2,x3]y = [y0,y1,y2,y3]

sympy求解

然后将阿基米德分牛问题转化为Python代码,其优雅之处在于,这些分数的构建遵循自然数递增的规律,故可通过循环来生成,非常便捷。

frac = lambda x : sympy.Rational(1,x)fs = []for i in range(3):    fs.append(x[i]-x[3]-(frac(2*i+2)+frac(2*i+3))*x[i+1])for i in range(4):    ind = (i + 1) % 4    fs.append(y[i]-(frac(i+3)+frac(i+4))*(x[ind]+y[ind]))

这样就得到了待求方程组

>>> for f in fs: print(f)...x0 - 5*x1/6 - x3x1 - 9*x2/20 - x3x2 - 55*x3/42-7*x1/12 + y0 - 7*y1/12-9*x2/20 + y1 - 9*y2/20-11*x3/30 + y2 - 11*y3/30-13*x0/42 - 13*y0/42 + y3

但是,8个未知数7个方程,显然没有唯一解,考虑到x3貌似是最小的值,所以最后希望用x3来表示其他数。

res = sympy.solve(fs, x[:3]+y)

结果

查看一下结果

for key in res:    print(sympy.latex(key), "&=", sympy.latex(res[key]), r"\\")

怎么用Python求解阿基米德分牛问题

这道题到这里基本上就算解完了,但是牛至少得是个整数,所以接下来要做的是求解分母的最小公倍数。

在sympy中,对于一个分数r,r.p为分子,r.q为分母;lcm可求解其最小公倍数。

denominators = [(v/x3).q for v in res.values()]x3Res = sympy.lcm(denominators)# 32859792

然后让将x3的值加入fs,

fs.append(x3-x3Res)res2 = sympy.solve(fs, x+y)for key in res2:    print(sympy.latex(key), "=", res2[key], r"\\")

结果如下

x0=76379457
x1=52223598
x2=43030680
x3=32859792
y0=48646815
y1=31170942
y2=26238080
y3=38698608

这些牛加一起有349247972头,全世界大概有10万亿头,看来太阳神的牛还是比较多的。

以上就是“怎么用Python求解阿基米德分牛问题”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么用Python求解阿基米德分牛问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么用Python求解阿基米德分牛问题

今天小编给大家分享一下怎么用Python求解阿基米德分牛问题的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。题目大意问 太阳神
2023-07-05

利用Python求解阿基米德分牛问题

这篇文章主要为大家详细介绍了如何利用Python优雅地求解阿基米德分牛问题,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
2023-03-09

Python怎么解决阿基米德分牛问题

阿基米德分牛问题是一个数学问题,它的解法并不依赖于编程语言。下面是一种解决阿基米德分牛问题的数学方法:1. 首先,设定一个初始的牛的数量n,假设初始牛的分布是均匀的。2. 然后,将这些牛分成两个群体,每个群体都有n/2头牛。3. 对于每个群
2023-08-15

怎么用Python/R语言分别解决金字塔数求和问题

本篇内容介绍了“怎么用Python/R语言分别解决金字塔数求和问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、前N阶乘求和阶乘是基斯顿
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录