Yanlış Anlaşılan Monomials


9

Var olan nve xpozitif olan bir denklem vardır,

denklem

iki monom arasındaki ilişkiyi ifade eden, biri diğerinin ortak yanlış temsilidir. Birçok insan bunları (yani 3x^2ve (3x)^2) eşitlemek gibi basit bir hata yapar .

Meydan okuma

Pozitif bir tam sayı göz önüne alındığında, ibelirlemek ve çözelti geri nve xbir dizi olarak küçük toplamı [n, x]. Beraberlik durumunda, herhangi bir çözelti seti kabul edilebilir.

Test Durumları

62658722541234765
[15, 11]

202500
[4, 15]

524288
[8, 4]

33044255768277
[13, 9]

[x, n]Bunun yerine geri dönebilir miyiz [n, x]?
16:11

Ayrıca, herhangi bir zaman kısıtlaması var mı?
16:22

nve xtamsayılar, değil mi?
Luis Mendo

Çıktılar formda [n, x]ve zaman kısıtlaması yok @Fatalize
Zach Gates

Evet, nve xtamsayı @LuisMendo
Zach Gates

Yanıtlar:


5

Brachylog , 35 bayt

,[N:X]#>>==L(.rMtT;Lr.rMtT),M^:T*?,

Çevrimiçi deneyin!

açıklama

Biz bir liste oluşturmak [N, X], N >= Xdaha sonra kendisine değerler atayarak sonra, ikimiz de deneyin [N, X]ve [X, N]olası çıktı olarak. Örneğin, Natanan alır 3, biz geriye yürütülerek test edecek [3, 1], [1, 3], [3, 2], [2, 3], [3, 3]ve [3, 3]. Bundan sonra, bir sonraki geri izleme adımı, değerine Ngidecek 4vb.

,[N:X]     The list [N, X]
#>         Both N and X are strictly positive
>=         N >= X
=L         Assign values to N and X, and L = [N, X]
(          Either...
    .          Output = L
    rM         M is the reverse of the Output
    tT         T is the second element of M
;          ...or...
    Lr.        Output is the reverse of L
    rM         M = L
    tT         T is the last element of M
),
M^         First element of M to the power of the second element of L (T)...
:T*?,      ... times T is equal to the Input

5

Mathematica, 61 bayt

2 bayt tasarruf için mil sayesinde, bir sürü bayt için sebepsiz sayıldım!

Last@Select[{n,(#/n)^(1/n)}~Table~{n,2Log@#},IntegerQ@*Last]&

{N, x} çiftinin bir tablosunu hesaplar; burada x = (i / n) ^ (1 / n), n'nin tüm olası değerlerini kullanarak; yalnızca karşılık gelen x'in bir tamsayı olduğu; sonra en büyük n değerine sahip çifti döndürür.

Burada "n'nin tüm olası değerleri" 1 ila 2 * ln (i) arasında değişir. Bu, {n, x} = {i, 1} çözümünü yok sayar, ancak bu iyi bir çözümdür, çünkü {n, x} = {1, i} çözümü en iyi seçimse yeterli olacaktır. Bu nedenle x'in asla 2'den küçük olması gerekmez, bu da n * 2 ^ n ≤ i anlamına gelir ve tüm bu n, 2 * ln (i) 'den küçüktür.

Analiz kullanılarak, bu bağlamda toplamlarını en aza indiren {n, x} çiftinin en büyük n ({i, 1} saymayan) ile {n, x} çifti ile aynı olduğu gösterilebilir. Bu yüzden ilk Lastharf en uygun çifti bulmak için yeterince iyidir.


1
Test koşulunu IntegerQ@*Last2 bayt kaydetmek için kullanarak oluşturabilirsiniz , ancak bu geçerli sürümde 63 değil 86 bayt sayıyorum.
mil

3

MATL , 22 bayt

`T@XK:"@K@-@^*G=?3Mb~.

Çıkışlar vardır x, nbu sırayla.

Giriş, MATL'nin yalnızca doubletam sayıları doğru bir şekilde temsil edebilen varsayılan veri türü ile sınırlıdır 2^53. Bu, ilk testi hariç tutar (yine de doğru sonucu verir, ancak bu kadar büyük girişler için genel olarak garanti edilemez).

Çevrimiçi deneyin!

açıklama

Kod iki iç içe döngü kullanır:

  • Dış do...whiledöngü n+xartan tüm sırayla olası toplamlardan geçer . Bir çözüm bulunur bulunmaz döngü durdurulacaktır. Bu, çözümü minimum toplamla çıkarmamızı garanti eder.
  • İç for eachdöngü hepsini nve xbu toplamı test eder. Toplam girişle çakıştığında, iç döngü çıkar ve dış halkanın döngü durumu da bir çıkıştan çıkacak şekilde ayarlanır false.

Yorumlanan kod:

`         % Do...while
  T       %   Push "true". Will be used as loop condition (possibly negated to exit loop)
  @       %   Push iteration index, say K, which represents n+x
  XK      %   Copy that into clipboard K
  :       %   Range [1 2 ... K]
  "       %   For each
    @     %     Push loop variable (1, 2, ... K), which represents n
    K@-   %     Compute x as K minus n
    @     %     Push n again
    ^*    %     Power, multiply. This gives n*x^n
    G=    %     Does this equal the input?
    ?     %     If so
      3M  %       Push the inputs of the third-last function, that is, x and n
      b   %       Bubble up the "true" that is at the bottom of the stack
      ~   %       Transform it into "false". This will exit the do...while loop
      .   %       Break the for loop
          %     Implicitly end if
          %   Implicitly end for
          % Implicitly end do...while
          % Implicitly display

2

Jöle , 23 16 bayt

×*@¥/=³
ṗ2ÇÐfSÞḢ

Verilen ibu, yerine ile tüm tamsayı çiftlerini üretir [1, i]. Daha sonra, aşağıda gösterilen önceki çözümle aynı filtreleme ve sıralama işlemini gerçekleştirir. Zaman kısıtı olmadığından, kaba kuvvet yeterli zaman verilir.

Çevrimiçi deneyin! , ancak büyük değerleri çevrimiçi olarak denemeyin.

Bilgisayarımda i = 2048, verimsiz sürümü kullanmak için sonucu hesaplamak yaklaşık 6 dakika sürer .

Verimli versiyon

Bu, büyük değerleri hızlı bir şekilde çözebilen 23 bayt için önceki çözümdür.

×*@¥/=³
ÆDµṚ*İ⁸żḞÇÐfSÞḢ

Verilen i, nerede bir bölen ve içiftleri oluşturmak için bölenleri hesaplar . Ardından , kalan çiftleri toplamlarına göre sıralayan ve ilk çifti döndürdüğü değerler için filtreler .[n, x]nx = floor( (i/n)^(1/n) )n * x^n == i

Çevrimiçi deneyin! veya Tüm test senaryolarını doğrulayın.

açıklama

×*@¥/=³  Helper link. Input: list [n, x]
    /    Reduce using
   ¥       A dyadic chain
 *@        Compute x^n
×          Multiply by n
      ³  The initial value i
     =   Test if n * x^n == i

ṗ2ÇÐfSÞḢ  Main link (16 byte version). Input: integer i
ṗ2        Generate all pairs of integers in [1, i]
  ÇÐf     Filter for where the helper link is true
     SÞ   Sort them by their sum
       Ḣ  Return the first result

ÆDµṚ*İ⁸żḞÇÐfSÞḢ  Main link (23 byte version). Input: integer i
ÆD               Compute the divisors of i
  µ              Begin a new monadic chain operating on the divisors
   Ṛ             Reverse the divisors
     İ           Reciprocal of each divisors
    *            Raise each in the reversed divisors to the reciprocal of a divisor
      ⁸          Get the divisors
       ż         Interleave the divisors with the previous powers
        Ḟ        Floor each
         ÇÐf     Filter for where the helper link is true
            SÞ   Sort them by their sum
              Ḣ  Return the first result

1

PHP, 104 Bayt

for(;1<$x=(($i=$argv[1])/++$n)**(1/$n);)!($x==ceil($x))?:$a[$x+$n]="[$x, $n]";ksort($a);echo$a[key($a)];

Bu, önerilen biçimde olmayan tüm olası çözümlerin çıktısını verir 73 Bayt

for(;1<=$x=(($i=$argv[1])/++$n)**(1/$n);)!($x==ceil($x))?:print"$x,$n\n";

1

Perl, 52 bayt

İçin +2 içerir -ap

STDIN'e giriş verin

mono.pl <<< 33044255768277

mono.pl:

#!/usr/bin/perl -ap
$_=("@F"/++$.)**(1/$.)while!/\./?$\="$. $_":$_>2}{

Bunun da işe yaraması için biraz çaba sarf etti 1. Kayan nokta hataları bu bazı girişler için yanlış cevap verebilir eğer hiçbir fikrim yok.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.