'Excel宏代码原创分享,转发请注明来源,作者:王欢为,WX:13772568903。
功能:1.判断一个数是否为质数。
FFisprime(正整数),例如
FFisprime(26)
返回:False
FFisprime(23)
返回:True
功能:2.判断多个数是否两两互质。
判断多个数a, b, c, d, ...是否两两互质
FFisprime(2, 正整数a, 正整数b, 正整数c, 正整数d, ...)
例如:
FFisprime(2, 40, 60, 7, 95)
返回:False
FFisprime(2, 15, 77, 26)
返回:True
功能:3.判断多个数是否互质。
判断多个数a, b, c, d, ...是否互质
FFisprime(3, 正整数a, 正整数b, 正整数c, 正整数d, ...)
例如:
FFisprime(3, 40, 60, 7, 95)
返回:True
FFisprime(3, 15, 77, 26)
返回:True
FFisprime(3, 20, 25, 80, 40)
返回:False
特别地,判断两个数是否互质可以省略上面参数中的2,按下面格式输入。
判断两个数a和b是否互质
FFisprime(正整数a, 正整数b)
例如:
FFisprime(40, 60)
返回:False
FFisprime(15, 28)
返回:True
函数代码如下:
Function FFisprime(ParamArray Arr1()) As Boolean
'Excel宏代码原创分享,转发请注明来源,作者:王欢为,WX:13772568903。
'功能:1.判断1个数是否为质数。
'功能:2.判断多个数是否两两互质。
'功能:3.判断多个数是否互质。
Dim ii%, jj%, Len1%, Num1#, Num2&, Num3&
Len1 = UBound(Arr1)
If Len1 = -1 Then '没有参数,返回False
FFisprime = False
Exit Function
End If
Num1 = Sqr(Arr1(0))
If Len1 = 0 Then '一个参数,判断该参数是否为质数
Num1 = Sqr(Arr1(0))
For ii = 2 To Num1
If Arr1(0) Mod ii = 0 Then
FFisprime = False
Exit Function
End If
Next
FFisprime = True
Exit Function
End If
If Len1 = 1 Then '两个参数,判断两个参数是否互质
Num2 = Arr1(0)
Num3 = Arr1(1)
Do While Num2 * Num3 <> 0
Num2 = Num2 Mod Num3
If Num2 * Num3 <> 0 Then
Num3 = Num3 Mod Num2
End If
Loop
If Num2 + Num3 > 1 Then
FFisprime = False
Exit Function
End If
FFisprime = True
Exit Function
End If
If Arr1(0) = 2 Then '两个及以上数字,判断是否两两之间互质,即任意两个数最大公约数为1。
For ii = 2 To Len1
For jj = 1 To ii - 1
Num2 = Arr1(ii)
Num3 = Arr1(jj)
Do While Num2 * Num3 <> 0
Num2 = Num2 Mod Num3
If Num2 * Num3 <> 0 Then
Num3 = Num3 Mod Num2
End If
Loop
If Num2 + Num3 > 1 Then
FFisprime = False
Exit Function
End If
Next
Next
FFisprime = True
Exit Function
End If
If Arr1(0) = 3 Then '两个及以上数字,判断这些参数是否互质,即最大公约数为1。
Num2 = Arr1(1)
Num3 = 0
For ii = 2 To Len1
Num3 = Num2 + Num3
Num2 = Arr1(ii)
Do While Num2 * Num3 <> 0
Num2 = Num2 Mod Num3
If Num2 * Num3 <> 0 Then
Num3 = Num3 Mod Num2
End If
Loop
If Num2 + Num3 = 1 Then
FFisprime = True
Exit Function
End If
Next
FFisprime = False
Exit Function
End If
FFisprime = False '其他情况,返回False。
End Function