范围内最高的独特素因子

时间:2017-01-11 19:44:45

标签: ruby math prime-factoring

我正在尝试将解决方案扩展到Hackerrank practice 问题。

总的来说,问题是找到范围内的素数因子的最大数量。

1..500 4 for 210 -> 2(1), 3(1), 5(1), 7(1) 1..5000 5 for 2310 -> 2(1), 3(1), 5(1), 7(1), 11(1) 1..50000 6 for 30030 -> 2(1), 3(1), 5(1), 7(1), 11(1), 13(1) 对于require 'prime' max = 0 for d in 1..n pfs = d.prime_division.count max = pfs if pfs > max end puts max n = 10000000000

这是我的解决方案

https://calendar.google.com/calendar/render?action=TEMPLATE&...

这需要from django.shortcuts import render from django.http import HttpResponse from .models import Description, Bill from django.http import Http404 from .forms import DForm from .forms import BForm import pprint # Create your views here. def index(request): context = {} return render(request, 'front/index.html', context) def commitbill(request): if request.method == "POST": form = BForm(request.POST,request.FILES) if form.is_valid(): print form.errors Bill = form.save() return HttpResponse(str(Bill.bill_id())) print form.errors return HttpResponse("fail") 永久。

我可能从错误的角度看待解决方案 如何扩展此解决方案?

2 个答案:

答案 0 :(得分:5)

解决方案

您示例中的数字只是第一个Primes的产品,如果您想在最大化因素数量的同时最小化产品,这实际上是有意义的。

有关详细信息,请参阅此整数sequence

  

a(n)是具有n个不同素因子的最小数N

代码

require 'prime'

n = 50000

p (1..n).find{|i| Prime.take(i+1).inject(:*) > n}
#=> 6

使用n = 10000000000

p (1..n).find{|i| Prime.take(i+1).inject(:*) > n}
#=> 10

解释

它计算第一个i+1素数的乘积,直到它大于n。在这种情况下,i是所需的输出。

请注意,i始终小于n,因此搜索范围(1..n)将绰绰有余。阻止返回真值后,find会停止搜索,因此如果range.maxnFloat::INFINITY,则无关紧要。

为每个i计算产品并不是非常有效,但解决方案发现得如此之快,可能并不重要:第一个k素数的乘积增长速度快于{ {1}},因此需要的步骤少于k!

对于哪个号码?

如果您想知道它是哪个号码:

O(Γ**-1(n))

或只是:

p Prime.inject { |product, prime|
  new_product = prime * product
  break product if new_product > n
  new_product
}
#=> 6469693230

答案 1 :(得分:2)

2n之间的不同素数的最大数量为mP(m) <= n < P(m+1),其中P(m) = p 1 < / sub> *p 2 *...*p m p {{1} } i最大的素数。证明(通过矛盾)很简单。假设i q 1 *q 2 *...*q 是任何其他增加素数的序列。自m+1的{​​{1}} p i <= q 以来,i的产品就是{ {1}}必须超过i = 1...m+1

q