我正在尝试将解决方案扩展到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")
永久。
我可能从错误的角度看待解决方案 如何扩展此解决方案?
答案 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.max
为n
或Float::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)
2
和n
之间的不同素数的最大数量为m
,P(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