大家好,欢迎来到IT知识分享网。
完美平方数定义
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; } } }
运行结果:
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/139542.html