Python练习题 003:完全平方数

news/2025/2/26 7:04:02

【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 的指教!先列出代码,大家随意感受一下:

python">[print(x**2-100, end = ',') for x in range(1000) for y in range(1000) if (y**2 - x**2 == 168)]

这个“列表推导式”很简洁很帅气有没有!展开写的话,就是:

python">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 这么大的值,要循环挺久的。

 

++++++++++++++++++++++++++++++++++++++++++++++

题目出处:编程语言入门经典100例【Python版】

转载于:https://www.cnblogs.com/iderek/p/5954778.html


http://www.niftyadmin.cn/n/1808707.html

相关文章

获取flash里的真实url地址,将swf文件下载保存下来

点击下载:UrlActionEditor-v4.04 这个软件可以看到,swf文件里的url。 看图: 看到http://fla.78baby.com/flashupfile/fads/这个地址了吧,这个就是真实的地址,下面我们看看一个具体页面的flash 上面embed标签里的 bofa…

ros launch文件编写和节点启动顺序控制

ROS可以通过launch文件进行节点的管理、初始参数的设置,但是launch文件不能指定节点的启动顺序,因此本文简单介绍下通过launch进行节点启动管理,通过shell来控制节点启动顺序。 1,我将读取参数的代码片段放在了ros::init(argc,arg…

struts2Springhibernate原理

1、Structs2 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基…

Errors running builder 'DeploymentBuilder'

Errors running builder DeploymentBuilder on project 1.修改java源代码后点击保存,IDE 自动编译并热部署,提示如下错误: Errors occurred during the build.Errors running builder DeploymentBuilder on project 项目名.java.lang.NullPointerException 产生原因: IDE勾选了…

Java面向对象三大特点之多态

概念: 多态是同一个行为具有多个不同表现形式或形态的能力。 多态就是同一个接口,使用不同的实例而执行不同操作,如图所示: 多态性是对象多种表现形式的体现,同一个事件发生在不同的对象上会产生不同的结果。 现实中&a…

Math类和Random类

Math类 成员变量: (1)public static final double PI :圆周率 (2) public static final double E :自然对数的底数 成员方法: (1)public static int abs(int x):绝对值 注意&#xf…

java构造函数为什么加m._求高人解释!为什么我写的构造函数中public 报错!!!······...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼package gg;import java.awt.*;import javax.swing.*;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;public class Example2 extends JFrame {MyPanel mpnull;public static void main(String[] args) {Examp…

printf对齐

C语言中&#xff0c;将printf函数打印出的字符像表格一样分类对齐。%-10d表示这个字符型占10个字节&#xff0c;负号表示左对齐。即下面表格中的x1位置开始填充。如果是%10d&#xff0c;表示右对齐&#xff0c;即在x10位置对齐。 x1x2x3x4x5x6x7x8x9x10#include<stdio.h>…