Python练习题 003:完全平方数
【Python练习题 003】一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
-------------------------------------------------
所谓的“完全平方数”,就是开完根号仍然是整数。
数学渣是这么思考的:假设这个数 i 在10000以内。第一步:x = sqrt(i+100)。如果 x == floor(x),则证明 x 是个整数。第二步道理也相同,但要记得把 x**2 把根号还原回来,再加上 168,然后再来开根号,得到 y,再判断其是否为整数。经过这两次判断,都能通过的话,则为所求的整数。
1 import math
2
3 for i in range(10000):
4 x = math.sqrt(i + 100)
5 if x == math.floor(x):
6 y = math.sqrt(x**2 + 168)
7 if y == math.floor(y):
8 print(i)
9 break
答案竟然是 21,好小的整数啊……
【2016-10-13 更新】-------------------------------------------------------------
神算法来了!!感谢 codegay 的指教!先列出代码,大家随意感受一下:
[print(x**2-100, end = ',') for x in range(1000) for y in range(1000) if (y**2 - x**2 == 168)]
这个“列表推导式”很简洁很帅气有没有!展开写的话,就是:
for x in range(1000):
for y in range(1000):
if (y**2 - x**2) == 168:
print(x**2-100, end = ',')
这是格式上的不同,不奇妙,真正奇妙的是算法啊算法!!它巧妙地将第1个完全平方数标识为 x**2,第2个标识为 y**2,如此就能用 if (y**2 - x**2) == 168 进行判断,不得不说真是太聪明了!(还是说我太笨了?)输出结果:
-99,21,261,1581
唯一遗憾的是,x 和 y 的取值范围完全不知道如何设定。随手取了个 range(1000),但就算是取 10000,结果也就只有这 4 个。我想,通过推导应该能证明最大值吧,但我就一数学渣,所以就算了…… PS:别轻易用 10000 这么大的值,要循环挺久的。
++++++++++++++++++++++++++++++++++++++++++++++
Python练习题 003:完全平方数的更多相关文章
- Python练习题 028:求3*3矩阵对角线数字之和
[Python练习题 028] 求一个3*3矩阵对角线元素之和 ----------------------------------------------------- 这题解倒是解出来了,但总觉得 ...
- Python练习题 027:对10个数字进行排序
[Python练习题 027] 对10个数字进行排序 --------------------------------------------- 这题没什么好说的,用 str.split(' ') 获 ...
- Python练习题 026:求100以内的素数
[Python练习题 026] 求100以内的素数. ------------------------------------------------- 奇怪,求解素数的题,之前不是做过了吗?难道是想 ...
- Python练习题 025:判断回文数
[Python练习题 025] 一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. ---------------------------------------- ...
- Python练习题 024:求位数及逆序打印
[Python练习题 024] 给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出各位数字. ---------------------------------------------- ...
- Python练习题 004:判断某日期是该年的第几天
[Python练习题 004]输入某年某月某日,判断这一天是这一年的第几天? ---------------------------------------------- 这题竟然写了 28 行代码! ...
- Python练习题-1.使用匿名函数对1~1000求和,代码力求简洁。
Python 练习 标签(空格分隔): Python Python练习题 Python知识点 一.使用匿名函数对1~1000求和,代码力求简洁. 答案: In [1]: from functools ...
- PYTHON练习题 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数。
Python 练习 标签: Python Python练习题 Python知识点 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数,如果大于预设的 ...
- python 基础 2.8 python练习题
python 练习题: #/usr/bin/python #coding=utf-8 #@Time :2017/10/26 9:38 #@Auther :liuzhenchuan #@File ...
随机推荐
- java最简单的知识之创建一个简单的windows窗口,利用Frame类
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 微博:http://weibo.com/mcxiaobing 首先给大家看一下 ...
- Win10 第三方浏览器无法上网或者上网速度慢 的终极解决方案
请参考: https://blog.csdn.net/shouzei123/article/details/82862478 近期,工程师收到大量反馈360浏览器,极速模式无法打开网页,兼容模式无此问 ...
- 3D人物移动控制实现方案
要控制3D人物在3D世界中进行正常的移动.转向,一般有两种情况: 1.使用人物动画控制人物 的移动 转向 2.使用脚本控制人物 的移动.转向 对方案一: Animator 组件勾选上 Apply Ro ...
- The Unique MST(最小生成树的唯一性判断)
Given a connected undirected graph, tell if its minimum spanning tree is unique. Definition 1 (Spann ...
- F - 丘 (欧拉函数)
Chinese people think of '8' as the lucky digit. Bob also likes digit '8'. Moreover, Bob has his own ...
- openresty(nginx+lua)初识
1.新增项目配置文件: vim /usr/example/example1.conf --将以下内容加入example1.conf server { listen 80; server_name _; ...
- Java远程连接Linux服务器并执行命令及上传文件
最近再开发中遇到需要将文件上传到Linux服务器上,至此整理代码笔记. 此种连接方法中有考虑到并发问题,在进行创建FTP连接的时候将每一个连接对象存放至 ThreadLocal<Ftp> ...
- sql server 2008 merge matched判定条件
SQL Server 2008 开始支持 MERGE语句 -- 源表 CREATE TABLE test_from (id INT, val VARCHAR(20)); -- 目标表 CRE ...
- Java 得到指定时间加半个小时之后得时间
Calendar c = Calendar.getInstance(); c.setTime(cur); //设置时间 c.add(Calendar.MINUTE, 1); //日期分钟加1,Cale ...
- Linux系统环境基于Docker搭建Mysql数据库服务实战
开放端口规划: mysql-develop:3407 mysql-test: 3408 mysql-release: 3409 ps: 1.不推荐使用默认端口-3306,建议自定义端口 2.如果采用阿 ...