问题1: 周长不大于n,边长为整数的三角形有多少个?
解法:
Function p(ByVal n As Long)'周长n的三角形的个数 If n Mod 2 Then n = n + 3 p = Round(n ^ 2 / 48) End Function Sub Main() Dim i As Long, c For i = 1 To 10 ^ 6 c = c + p(i) Next Debug.Print c End Sub
返回:6944486111111111
问题2: 周长不大于n,边长为整数,并且至少有一个角为整数(以角度表示)的三角形有多少个?
解法:
Function gcd(ByVal a As Long, ByVal b As Long) As Long If b = 0 Then gcd = a: Exit Function gcd = gcd(b, a Mod b) End Function Sub main() Dim p As Long, c As Long p = 10 ^ 6 c = p \ 3 '等边三角形的个数 Dim m As Long, n As Long, k As Long For n = 1 To Int((Sqr(4 * p + 1) - 3) / 4) + 1 For k = 1 To Int((Sqr(n * n + 2 * p) - 3 * n) / 2) m = n + k If gcd(m, n) = 1 Then If (m - n) Mod 2 = 1 Then c = c + p \ (2 * m * (m + n)) If (m - n) Mod 3 > 0 Then c = c + p \ (m * (2 * m + 3 * n) + n * n) + p \ (5 * m * n + 2 * (m * m + n * n)) + p \ (3 * m * (m + n)) End If Next Next Debug.Print c End Sub
返回:3055201