Return 包含互质数的数组
Return array containing count of co-primes
互质数是公因数仅为1的数。
问题陈述:
给定一个正数整数数组 'A',我需要 return 一个整数数组 'B',使得 B[i]= 整数 j 的计数,使得 1 <= j <= A[i] 和 j 关于 A[i] 互质。
例如,对于 A = [5,8,14],B 将为 [4,4,6]
解释:
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 <= A[i] <= 10(power_of)5
1 <= A 的大小 <= 10(power_of)5
我有一个解决方案,但由于某些原因,它 return 对于较大的数组来说是错误的结果,而且也不省时。
请帮助我提供更好的解决方案,或指导我如何优化我的解决方案?
解法:
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 开始计数。
我几年前为 rosettacode 写的:
require "prime"
def totient(n)
n.prime_division.inject(1) {|res, (pr, exp)| res *= (pr-1) * pr**(exp-1) }
end
互质数是公因数仅为1的数。
问题陈述: 给定一个正数整数数组 'A',我需要 return 一个整数数组 'B',使得 B[i]= 整数 j 的计数,使得 1 <= j <= A[i] 和 j 关于 A[i] 互质。 例如,对于 A = [5,8,14],B 将为 [4,4,6]
解释: 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 <= A[i] <= 10(power_of)5 1 <= A 的大小 <= 10(power_of)5
我有一个解决方案,但由于某些原因,它 return 对于较大的数组来说是错误的结果,而且也不省时。 请帮助我提供更好的解决方案,或指导我如何优化我的解决方案?
解法:
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 开始计数。
我几年前为 rosettacode 写的:
require "prime"
def totient(n)
n.prime_division.inject(1) {|res, (pr, exp)| res *= (pr-1) * pr**(exp-1) }
end