2010-12-28 16 views
8

buradanasıl hesaplamak için operasyonların az sayısını bulmak için x^n

ACM Uluslararası Collegiate Programlama Yarışması Asya Bölge Yarışması, Yokohama, 2006-11-05

gelen sorundur

x ile başlayan ve art arda x ile çarpılması biz otuz çarpmalar ile x^31 hesaplayabiliriz:

x^2 = x * x, x^3 = x^2 * x, x^6 = x^3 * x^3, x^7 = x^6 *x, x^14 = x^7 * x^7 , 
x^15 = x^14 * x, x^30 = x^15 * x^15 , x^31 = x^30 * x 

n<=200

için

= 31 en az #operations bir n 6
verilen pozitif tamsayı n ve için x başlayarak çarpma ve bölme ile x^n hesaplamak için işlemlerin en az sayısını bulmak için bir program bilgileri = 50 en az #operasyonlar 7

Herhangi bir fikir kabul edilir.

+1

İpucu: http://en.wikipedia.org/wiki/Exponentiation_by_squaring –

+4

@Martinho Fernandes - kare ile üsleme minimum işlem sayısını kullanmaz. – IVlad

cevap

11

bu bakınız: http://en.wikipedia.org/wiki/Addition-chain_exponentiation

Orada size olan en az adımda alacak hiçbir verimli algoritma ve dinamik programlama çalışmıyor.

Ben optimize edilmesi gerekebilir rağmen n, bir kaba kuvvet çözüm geçmesine izin verecek kadar küçük olduğunu tahmin ediyorum. Bunu nasıl zorlayacaklarını biliyor musun?

+2

+1 Oooh, parlak! Sanırım gün için "yeni şey öğrendim". Yazık o –

+2

Evet, ben bir sürü insan ilginç bugün bir şey öğreneceksiniz :) 1 çok –

+0

o NP tam beri düşünüyorum :(gerçi NP-tam olduğunu ve n etki alanı oldukça küçük, bir masa derlemek ve sadece aramalarını yapmak .. – lijie