【发布时间】:2021-10-21 05:59:05
【问题描述】:
互质数是公因数只有1的数。
问题陈述: 给定一个正数整数数组“A”,我需要返回一个整数数组“B”,使得 B[i]= 整数 j 的计数,使得 1
解释: A[0] = 5,小于 5 的数字,即 1-4 是素数。所以 B[0] = 4 A[1] = 8,小于8的数是1-7,其中[1,3,5,7]是互质数,因此B[0]=4 A[2] = 14,1-13之间的互质数是[1,3,5,9,11,13],因此B[2] = 6
约束: 1
我有一个解决方案,但由于某种原因,它会为更大的数组返回错误的结果,而且时间效率也不高。 请帮助我找到更好的解决方案,或者指导我如何优化我的解决方案?
解决方案:
class CoPrime
def count_coprime(input)
array = []
input.each do |i|
array << (1...i).count { |a| i.gcd(a) == 1 } #gcd function from integer class
end
print "The count of co prime for #{input} are #{array}\n"
end
end
c = CoPrime.new
c.cout_coprime([5,8,14])
时间复杂度很差,因为数组中的每个元素都会从 1 开始计数。
【问题讨论】:
-
你可以考虑换一种方式来calculate the totient。
-
这称为 Totient 或 PHI() 函数。这是一个非常有效的示例,说明如何在 VB.net 中处理大量数字:stackoverflow.com/a/1134851/109122
标签: ruby algorithm sliding-window