【问题标题】:Return array containing count of co-primes返回包含互质数的数组
【发布时间】: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 开始计数。

【问题讨论】:

标签: ruby algorithm sliding-window


【解决方案1】:

几年前我为rosettacode写了这个:

require "prime"

def totient(n)
    n.prime_division.inject(1) {|res, (pr, exp)| res *= (pr-1) * pr**(exp-1) } 
end

【讨论】:

  • 你能帮我解决这个解决方案的时间复杂度吗? @steenslag
  • @niyanta 不,我对此知之甚少。
  • 不用担心,感谢您的解决方案,它完美运行! @steenslag
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多