数学相关-MathUtil
# 简介
静态工具类 MathUtil,提供了一系列常用的数学相关方法,包括求最大公约数、最小公倍数、判断质数、计算阶乘和斐波那契数列等常用算法。同时还包括了一些常用的计算方法,如判断浮点数是否相等、求平均值和中位数等。此外,工具类还提供了计算二进制中 1 的个数、判断完全平方数、判断快乐数等功能,同时还提供了一些与数学相关的小技巧,如计算两个整数的二进制中不同的位数、计算一个整数的所有因子等。
# EasyTool.MathUtil 类
方法说明:
Gcd
: 计算两个整数的最大公约数。Lcm
: 计算两个整数的最小公倍数。IsPrime
: 判断一个整数是否为质数。ApproxEqual
: 计算两个浮点数的差的绝对值是否小于指定的精度。Factorial
: 求一个整数的阶乘。Fibonacci
: 求一个整数的斐波那契数列的值。CountBits
: 求一个整数的二进制表示中 1 的个数。Average
: 求两个浮点数的平均值。Median
: 求两个浮点数的中位数。Pow
: 计算 n 的 k 次方。IsPerfectSquare
: 判断一个整数是否为完全平方数。IsHappyNumber
: 计算一个整数的各个数位上数字的平方和,如果结果为 1,则返回 true;否则进行下一次计算,直到结果为 1 或者进入死循环为止。HammingDistance
: 计算两个整数的二进制表示中有多少位不同。GetAllFactors
: 求一个整数的所有因子。Add
: 计算两个整数的和,如果结果溢出了 int 类型的取值范围,则返回 int.MaxValue。
# Gcd-计算两个整数的最大公约数
/// <summary>
/// 计算两个整数的最大公约数
/// </summary>
/// <param name="a">第一个整数</param>
/// <param name="b">第二个整数</param>
/// <returns>最大公约数</returns>
public static int Gcd(int a, int b)
# Lcm-计算两个整数的最小公倍数
/// <summary>
/// 计算两个整数的最小公倍数
/// </summary>
/// <param name="a">第一个整数</param>
/// <param name="b">第二个整数</param>
/// <returns>最小公倍数</returns>
public static int Lcm(int a, int b)
# IsPrime-判断一个整数是否为质数
/// <summary>
/// 判断一个整数是否为质数
/// </summary>
/// <param name="n">要判断的整数</param>
/// <returns>如果是质数,则返回 true;否则返回 false</returns>
public static bool IsPrime(int n)
# ApproxEqual-计算两个浮点数的差的绝对值是否小于指定的精度
/// <summary>
/// 计算两个浮点数的差的绝对值是否小于指定的精度
/// </summary>
/// <param name="a">第一个浮点数</param>
/// <param name="b">第二个浮点数</param>
/// <param name="eps">指定的精度</param>
/// <returns>如果两个浮点数的差的绝对值小于指定的精度,则返回 true;否则返回 false</returns>
public static bool ApproxEqual(double a, double b, double eps)
# Factorial-求一个整数的阶乘
/// <summary>
/// 求一个整数的阶乘
/// </summary>
/// <param name="n">要求阶乘的整数</param>
/// <returns>阶乘结果</returns>
public static int Factorial(int n)
# Fibonacci-求一个整数的斐波那契数列的值
/// <summary>
/// 求一个整数的斐波那契数列的值
/// </summary>
/// <param name="n">要求斐波那契数列的整数</param>
/// <returns>斐波那契数列的值</returns>
public static int Fibonacci(int n)
# CountBits-求一个整数的二进制表示中 1 的个数
/// <summary>
/// 求一个整数的二进制表示中 1 的个数
/// </summary>
/// <param name="n">要求二进制表示中 1 的个数的整数</param>
/// <returns>二进制表示中 1 的个数</returns>
public static int CountBits(int n)
# Average-求两个浮点数的平均值
/// <summary>
/// 求两个浮点数的平均值
/// </summary>
/// <param name="a">第一个浮点数</param>
/// <param name="b">第二个浮点数</param>
/// <returns>两个浮点数的平均值</returns>
public static double Average(double a, double b)
# Median-求两个浮点数的中位数
/// <summary>
/// 求两个浮点数的中位数
/// </summary>
/// <param name="a">第一个浮点数</param>
/// <param name="b">第二个浮点数</param>
/// <returns>两个浮点数的中位数</returns>
public static double Median(double a, double b)
# Pow-计算 n 的 k 次方
/// <summary>
/// 计算 n 的 k 次方
/// </summary>
/// <param name="n">底数</param>
/// <param name="k">指数</param>
/// <returns>n 的 k 次方</returns>
public static int Pow(int n, int k)
# IsPerfectSquare-判断一个整数是否为完全平方数
/// <summary>
/// 判断一个整数是否为完全平方数
/// </summary>
/// <param name="n">要判断的整数</param>
/// <returns>如果是完全平方数,则返回 true;否则返回 false</returns>
public static bool IsPerfectSquare(int n)
# IsHappyNumber-计算一个整数的各个数位上数字的平方和
/// <summary>
/// 计算一个整数的各个数位上数字的平方和,如果结果为 1,则返回 true;否则进行下一次计算,直到结果为 1 或者进入死循环为止
/// </summary>
/// <param name="n">要计算的整数</param>
/// <returns>如果结果为 1,则返回 true;否则返回 false</returns>
public static bool IsHappyNumber(int n)
# HammingDistance-计算两个整数的二进制表示中有多少位不同
/// <summary>
/// 计算两个整数的二进制表示中有多少位不同
/// </summary>
/// <param name="a">第一个整数</param>
/// <param name="b">第二个整数</param>
/// <returns>两个整数的二进制表示中有多少位不同</returns>
public static int HammingDistance(int a, int b)
# GetAllFactors-求一个整数的所有因子
/// <summary>
/// 求一个整数的所有因子
/// </summary>
/// <param name="n">要求因子的整数</param>
/// <returns>所有因子</returns>
public static int[] GetAllFactors(int n)
# Add-计算两个整数的和
/// <summary>
/// 计算两个整数的和,如果结果溢出了 int 类型的取值范围,则返回 int.MaxValue
/// </summary>
/// <param name="a">第一个整数</param>
/// <param name="b">第二个整数</param>
/// <returns>两个整数的和,如果结果溢出了 int 类型的取值范围,则返回 int.MaxValue</returns>
public static int Add(int a, int b)
# 代码示例
using System;
class Program
{
static void Main(string[] args)
{
// 求最大公约数
int gcd = MathUtil.Gcd(24, 36);
Console.WriteLine("24 和 36 的最大公约数为:" + gcd);
// 求最小公倍数
int lcm = MathUtil.Lcm(24, 36);
Console.WriteLine("24 和 36 的最小公倍数为:" + lcm);
// 判断质数
bool isPrime = MathUtil.IsPrime(17);
Console.WriteLine("17 是否为质数:" + isPrime);
// 判断浮点数是否相等
bool approxEqual = MathUtil.ApproxEqual(0.1 + 0.2, 0.3, 0.0001);
Console.WriteLine("0.1 + 0.2 是否等于 0.3:" + approxEqual);
// 求阶乘
int factorial = MathUtil.Factorial(5);
Console.WriteLine("5 的阶乘为:" + factorial);
// 求斐波那契数列
int fibonacci = MathUtil.Fibonacci(5);
Console.WriteLine("斐波那契数列的第 5 项为:" + fibonacci);
// 求二进制中 1 的个数
int countBits = MathUtil.CountBits(7);
Console.WriteLine("7 的二进制中有 " + countBits + " 个 1");
// 求平均数
double average = MathUtil.Average(3.5, 4.5);
Console.WriteLine("3.5 和 4.5 的平均数为:" + average);
// 求中位数
double median = MathUtil.Median(3.5, 4.5);
Console.WriteLine("3.5 和 4.5 的中位数为:" + median);
// 求幂
int pow = MathUtil.Pow(2, 10);
Console.WriteLine("2 的 10 次方为:" + pow);
// 判断完全平方数
bool isPerfectSquare = MathUtil.IsPerfectSquare(16);
Console.WriteLine("16 是否为完全平方数:" + isPerfectSquare);
// 判断快乐数
bool isHappyNumber = MathUtil.IsHappyNumber(19);
Console.WriteLine("19 是否为快乐数:" + isHappyNumber);
// 计算二进制中不同的位数
int hammingDistance = MathUtil.HammingDistance(1, 4);
Console.WriteLine("1 和 4 的二进制中有 " + hammingDistance + " 位不同");
// 求因子
int[] factors = MathUtil.GetAllFactors(12);
Console.Write("12 的所有因子为:");
foreach (int factor in factors)
{
Console.Write(factor + " ");
}
Console.WriteLine();
// 求和
int sum = MathUtil.Add(int.MaxValue - 1, 1);
Console.WriteLine("int.MaxValue - 1 + 1 = " + sum);
}
}
上次更新: 2023/04/26, 22:10:06