完美平方数定义

如果一个正整数 a 是某一个整数 b 的平方,那么这个正整数 a 叫做完全平方数。零也可称为完全平方数。
完全平方数的性质如下:

1、平方数的个位数字只能是 0, 1,4,5,6,9 。

2、任何偶数的平方一定能被 4 整除;任何奇数的平方被 4(或 8)除余 1,即被4 除余 2 或 3 的数一定不是完全平方数。

3、完全平方数的个位数字是奇数时,其十位上的数字必为偶数。完全平方数的个位数字是 6 时,其十位数字必为奇数。

4、凡个位数字是 5 但末两位数字不是 25 的自然数不是完全平方数;末尾只有奇数个 0 的自然数不是完全平方数;个位数字是 1,4,9 而十位数字为奇数的自然数不是完全平方数。

5、除 1 外,一个完全平方数分解质因数后,各个质因数的指数都是偶数,如果一个数质分解后, 各个指数都为偶数, 那么它肯定是个平方数。 完全平方数的所有因数的总个数是奇数个。因数个数为奇数的自然数一定是完全平方数。

6、如果 a 、b 是平方数, a=bc ,那么 c 也是完全平方数。

7、两个连续自然数的乘积一定不是平方数,两个连续自然数的平方数之间不再有平方数。

8、如果十位数字是奇数,则它的个位数字一定是6;反之也成立。

测试几种方法的用时

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace PerfectSquareDemo
{class Program{const int maxNumber = 4096;static void Main(string[] args){Console.SetWindowSize(140, 20);Console.WriteLine("小明今年的年龄减去10是个完全平方数,加上10也是个完全平方数,问小明今年的年龄");List<int> list = GetPerfectSquareList(1, 100);for (int i = 0; i < 100; i++){if (list.Contains(i - 10) && list.Contains(i + 10)){Console.WriteLine($"从完全平方数的集合中查找:小明年龄【{i}】");}if (IsPerfectSquareNumber(i - 10) && IsPerfectSquareNumber(i + 10)){Console.WriteLine($"根据完全平方数定义查找:小明年龄【{i}】");}}Console.WriteLine("----测试几个算法的用时----");Task taskPredicate = Task.Run(() => { AlgorithmTimespan(IsPerfectSquareNumber, nameof(IsPerfectSquareNumber)); });Task taskPredicate1 = Task.Run(() => { AlgorithmTimespan(IsPerfectSquareNumber1, nameof(IsPerfectSquareNumber1)); });Task taskPredicate2 = Task.Run(() => { AlgorithmTimespan(IsPerfectSquareNumber2, nameof(IsPerfectSquareNumber2)); });Task.WaitAll(taskPredicate, taskPredicate1, taskPredicate2);Console.ReadLine();}/// <summary>/// 获取完美平方数的集合/// </summary>/// <param name="fromIndex"></param>/// <param name="toIndex"></param>/// <returns></returns>static List<int> GetPerfectSquareList(int fromIndex, int toIndex){List<int> list = new List<int>();for (int i = fromIndex; i <= toIndex; i++){list.Add(i * i);}return list;}/// <summary>/// 算法用时/// </summary>/// <param name="PredicateMethod">判定是否是完美平方数的方法</param>/// <param name="methodName"></param>static void AlgorithmTimespan(Func<int, bool> PredicateMethod, string methodName){Stopwatch stopwatch = Stopwatch.StartNew();string path = AppDomain.CurrentDomain.BaseDirectory + methodName + ".log";if (File.Exists(path)){File.Delete(path);}for (int number = 1; number <= maxNumber; number++){bool isPerfectSquare = PredicateMethod(number);File.AppendAllText(path, $"【{number}】是完美平方数:【{isPerfectSquare}】{Environment.NewLine}", Encoding.UTF8);}Console.WriteLine($"【{methodName.PadRight(22)}】,对【{maxNumber}】个数字进行完美平方数判定并打印出来,用时【{stopwatch.Elapsed.TotalMilliseconds}】ms");}/// <summary>/// 判断一个数是否是完全平方数/// 平方根取整法/// </summary>/// <param name="number"></param>/// <returns></returns>static bool IsPerfectSquareNumber(int number){double x = Math.Sqrt(number);int truncate = (int)x;return truncate * truncate == number;}/// <summary>/// 判断一个数是否是完全平方数/// 存在一个数的平方等于当前数/// </summary>/// <param name="number"></param>/// <returns></returns>static bool IsPerfectSquareNumber1(int number){for (int i = 1; i <= number; i++){if (i * i == number){return true;}}return false;}/// <summary>/// 判断一个数是否是完全平方数/// 取平方根,然后取整,如果能整除/// </summary>/// <param name="number"></param>/// <returns></returns>static bool IsPerfectSquareNumber2(int number){int i = (int)Math.Sqrt(number);return number % i == 0;}}
}

运行结果:

完全平方数的几种判定方法与算法用时相关推荐

  1. java set取最大最小_Java中取得数组中最大(小)元素的几种实现方法

    简介 本篇文章将主要介绍获取数组中最大(小)元素的基本方法,以及其在Java中的几种实现方法. 算法 取得数组中最大(小)元素的基本算法一般都类似于如下所示: SET MAX to array[0] ...

  2. 基于Warshall算法的连通图及欧拉图判定方法

    1736年欧拉解决了哥尼斯堡七桥问题.他在这一具体问题的基础上进一步研究,最终找到了一个简便的原则可以鉴别一个图(多重图)能否一笔画成. 本文中,笔者使用布尔矩阵来存储一个无向图,并结合集合论中&qu ...

  3. 索骥馆-编程语言之《算法引论-一种创造性方法》扫描版[PDF]

    内容介绍: 本书是国际算法大师乌迪·曼博(UdiManber)博士撰写的一本享有盛誉的著作.全书共分12章:第1章到第4章为介绍性内容,涉及数学归纳法.算法分析.数据结构等内容:第5章提出了与归纳证明 ...

  4. 一种linux平台下算法库二进制文件加密方法探讨

    最近做项目遇到一个需求,需要把我们的图像算法库提供给客户使用,为防止算法库被对方滥用和逆向破解,需要对算法库二进制文件做加密处理以及加密狗绑定,同时防止库文件被反调试跟踪.算法库加密可以借助开源软件 ...

  5. 避免图像去雾算法中让天空部分出现过增强的一种简易方法

    FROM:http://www.chawenti.com/articles/25193.html 在经典的几种去雾算法中,包括何凯明的暗通道去雾.Tarel的基于中值滤波的去雾以及一些基于其他边缘保留 ...

  6. OpenRASP xss算法的几种绕过方法

    openrasp默认只能检测反射型XSS,存储型XSS仅IAST商业版支持.对于反射型xss,openrasp也只能检测可控输出点在html标签外的情况,本文的绕过方法是针对这种情况.如果可控输出点在 ...

  7. 0-1 背包问题的 4 种解决方法算法策略

    蛮力法 递归与分治策略 动态规划 贪心算法 回溯法 分支限界法 前言 0-1 背包是一个经典的问题,而它能用不同的算法思想去解决.恰巧最近在看算法,学习算法就是学习解决问题的思路.现在将 0-1 背包 ...

  8. python视频提取关键帧_一种视频关键帧提取算法的制作方法

    本发明属于信息安全技术领域,涉及视频内容信息的提取,具体来说,是一种视频关键帧提取算法. 背景技术: 随着Internet的应用和普及,多媒体信息检索系统对社会各领域产生越来越大的影响.传统的信息检索 ...

  9. 语音识别维特比解码_一种基于维特比算法的花洒语音识别系统及方法与流程

    本发明涉及语音识别技术领域,具体涉及一种基于维特比算法的花洒语音识别系统及方法. 背景技术: 随着生活水平的提高和住房条件的改善,很多家庭都安装了沐浴设施,花洒是其中最常见的淋浴装置.目前花洒产品多为 ...

  10. isfile方法_递归算法是一种直接或者间接调用自身函数或者方法的算法

    http://blog.csdn.NET/wangjinyu501/article/details/8248492 原版 一.基本概念 递归算法是一种直接或者间接调用自身函数或者方法的算法.Java递 ...

最新文章

  1. ++i和i++效率谁高
  2. 代理模式给我们带来的便利
  3. E 做任务三(区间)
  4. Happy 牛 Year!牛年dotnet云原生技术趋势
  5. P1266 速度限制
  6. Django,再谈json序列化
  7. 从三级界面直接跳回一级调用方法
  8. Custom UDP Packet Wrapper
  9. Matlab Tricks(二十四)—— 将一副图像逆时针旋转 180°
  10. 汇编指令对应的机器码_汇编语言输出“welcome to you!”
  11. 白盒测试之基本路径测试法[3]
  12. python中国地图数据下载_中国地图数据可视化(Python+selenium+Matplotlib),PythonSeleniumMatplotlib...
  13. 2020互联网大厂中秋礼盒PK!我酸了!
  14. 超级HOOK技术无需分析基址
  15. 磁共振影像分析之: 基于FSL的VBM分析(1)
  16. Angular判断对象不否为空的方法
  17. 如何提升会员收入?从这道面试题谈谈框架思维。
  18. HTML5系列代码:使用自定义图像来作为空距
  19. C#之判断字母大小、字母转ACII码
  20. SSH登录时“no matching host key type found. Their offer: ssh-rsa,ssh-dss“的错误解决方法

热门文章

  1. excel中的菜单栏自定义_如何在Excel中自定义和使用状态栏
  2. Elasticsearch顶尖高手系列:高手进阶篇(二)
  3. Flask(6):Flask的闪现+Flask的蓝图
  4. Fiddler 抓取手机数据包,代理连接成功,但是手机无法上网
  5. 最新可用今日头条视频解析(简单分析+易语言实现)
  6. Excel 纵向查找函数 vlookup() 使用入门
  7. 裁员浪潮,互联网人该何去何从?
  8. android_x86安装arm转译
  9. luogu P5064 [Ynoi2014] 等这场战争结束之后
  10. 2020杭电多校赛 Multi-University Training Contest