X ^ 2, 7 ^ x-1'i böler.


16

Görev

Sayılar kümesi vardır x, öyle ki x^2böler 7^x-1.

Göreviniz bu numaraları bulmak. N girdisi verildiğinde, kod bu kurala uyan n. Sayıyı yazdırır.

Örnekler 1-endeksi

In   Out
3    3
9    24
31   1140

İlgili sekans burada bulunabilir .

kurallar

En kısa cevap kazanan olacak *

Standart golf kuralları geçerlidir

Loopholes'a izin verilmiyor

Cevabınız 0 veya 1 indekslenebilir, lütfen cevabınızı belirtin


@nimi Planlarken bunları yazdım ve asla uygulamadım. Soruyu güncelledim
george

Sınırları nelerdir n? İle doğru sonucu verebilirim n=9, ama n=10zaten bana sorunlara neden oluyor.
Briantist

@briantist Daha yüksek giriş değerleri için yanlış sonuç alıyorsanız, cevabınız yanlıştır. Sadece uzun zaman alıyorsa, uygulamaya bağlı olabilir.
mbomb007

Sadece uzun zaman almaz. n=10bana 32 verir; çünkü tamsayılar yerine double kullanmaya başlar ve mod bundan sonra yanlıştır. :(
briantist

Yanıtlar:


8

Haskell, 34 bayt

([x|x<-[1..],mod(7^x-1)(x^2)<1]!!)

Bu, 0 tabanlı dizinleme kullanır. Kullanım örneği: ([x|x<-[1..],mod(7^x-1)(x^2)<1]!!) 30-> 1140.

Tanımın doğrudan uygulanmasıdır. Tüm sayıların bir listesini oluşturur xve nth alır .


5

Pyth , 10 bayt

e.f!%t^7Z*

Bir tamsayı girdisi alan ve tek dizinli bir değer basan bir program.

Çevrimiçi deneyin!

Nasıl çalışır

e.f!%t^7Z*     Program. Input: Q
e.f!%t^7Z*ZZQ  Implicit variable fill
               Implicitly print
e              the last
 .f         Q  of the first Q positive integers Z
     t^7Z      for which 7^Z - 1
    %          mod
         *ZZ   Z^2
   !           is zero

5

JavaScript (ES7), 40 bayt

f=(n,i=1)=>n?f(n-!((7**++i-1)%i**2),i):i

Bu, JS'nin hassasiyetini kaybetmesi nedeniyle hassasiyeti oldukça hızlı bir şekilde kaybeder 7**19. İşte neredeyse keyfi bir ES6 sürümü:

f=(n,i=0)=>n?f(n-!(~-(s=++i*i,g=j=>j?g(j-1)*7%s:1)(i)%s),i):i

Bu, test durumu 31 için yaklaşık bir saniye içinde sona erer.

Birkaç uzun yaklaşım:

f=(n,i=0)=>n?f(n-!(~-(s=>g=j=>j?g(j-1)*7%s:1)(++i*i)(i)%s),i):i
f=(n,i=0)=>n?f(n-!(s=++i*i,g=(j,n=1)=>j?g(j-1,n*7%s):~-n%s)(i),i):i
f=(n,i=0)=>n?f(n-!(s=>g=(j,n=1)=>j?g(j-1,n*7%s):~-n%s)(++i*i)(i),i):i

4

05AB1E , 11 bayt

µ7Nm<NnÖiN¼

Çevrimiçi deneyin!

Nedense ½işe µ7Nm<NnÖ½Ngiremiyorum ya da Pyth ile bağlantım olur.

µ           # Loop until the counter equals n.
 7Nm<       # Calc 7^x+1.
     Nn     # Calc x^2.
       Ö    # Check divisibility.
        iN¼ # If divisible, push current x and increment counter.
            # Implicit loop end.
            # Implicitly return top of stack (x)

.


Evet, Öaylarca düzeltme listemde o tuhaflığı yaşadım ama onunla uğraşmak için hiç uğraşmadım. Neyse, sen gerekmez Nolarak µotomatik olarak son verir Nyığın boşsa.
Emigna

4

Python 2 , 48 46 bayt

@Dennis'e -2 bayt için teşekkürler!

f=lambda n,i=1:n and-~f(n-(~-7**i%i**2<1),i+1)

Bağımsız değişken üzerinden girdi alan ve sonucu döndüren tek dizinli özyinelemeli işlev.

Çevrimiçi deneyin! (Son test senaryosunun çalışmasına izin vermek için özyineleme limiti artırıldı)

Nasıl çalışır

nistenen endekstir ve isayma değişkenidir.

Sentezleme ~-7**i%i**2<1döner True(eşdeğer 1) halinde i^2böler 7^i - 1, ve False(eşdeğer 0) olarak belirtilmiştir. İşlev her çağrıldığında, ifadenin sonucu çıkarılır ve her isabet bulunduğunda nazalır n; ida artırılır.

Kısa devre davranışı andzaman bu yollarla nolan 0, 0geri döndürülür; bu temel durumdur. Buna ulaşıldığında, özyineleme durur ve geçerli değeri iorijinal işlev çağrısı tarafından döndürülür. Açıkça kullanmak yerine i, bu her işlev çağrısı -~için çağrının önü kullanılarak bir artış gerçekleştirildiği gerçeği kullanılarak yapılır ; gerektiğinde artış 0 isüreleri verilir i.


1
(~-7**i%i**2<1)birkaç bayt kaydeder.
Dennis

@Dennis Tabii ki! Teşekkürler.
TheBikingViking

3

Python 2 , 57 53 51 bayt

ETHproductions sayesinde -4 bayt TuukkaX
sayesinde -2 bayt

i=0
g=input()
while g:i+=1;g-=~-7**i%i**2<1
print i

Çevrimiçi deneyin!
dizi 1 dizinli


@ETHproductions yep c:
Rod

Parantezleri kaldırırsanız bir testcase başarısız olur (7**i)mu? Onları kaldırdım ve denediklerim için çalıştı.
Yytsi

@TuukkaX gerçekten **daha yüksek önceliğe sahiptir ~ve-
Rod

2

Python 2, 57 bayt

Bu, büyük değerler için gerçekten çok uzun zaman alır . Ayrıca, tüm listeyi gereğinden fazla oluşturduğu için bol miktarda bellek kullanır. Sonuç sıfır indekslenir.

lambda n:[x for x in range(1,2**n+1)if(7**x-1)%x**2<1][n]

Çevrimiçi deneyin


meraktan, 2**n+1üst sınır için herhangi bir kanıt var mı?
Rod

@Rod Bildiğimden değil, 50 değerinin <5000 olduğu düşünüldüğünde, eminim 50'den fazla <olduğundan eminim 2**50. Kullanabilirdim 9**n+9, ama çok daha uzun sürüyor. f(20)Bir süre önce koşmaya başladım (ile 2**n+1); hala tamamlanmadı.
mbomb007

Dizinin sonsuz olduğuna dair bir kanıt olduğunu bile düşünmüyorum, yalnız dördüncü terim için güzel bir üst sınır!
Greg Martin

2

Mathematica, 43 bayt

Şu anda bu bayt sayısında üç farklı çözümüm var:

Nest[#+1//.x_/;!(x^2∣(7^x-1)):>x+1&,0,#]&
Nest[#+1//.x_/;Mod[7^x-1,x^2]>0:>x+1&,0,#]&
Nest[#+1//.x_:>x+Sign@Mod[7^x-1,x^2]&,0,#]&

İlk satırdaki x ^ 2 ve (7 ^ x ... arasındaki karakter nedir?) Bir boru gibi görünüyor ancak daha kısa
Sefa

@Sefa Matematiksel "bölmeler" sembolü için Unicode karakteridir ve Mathematica tarafından bir operatör olarak kullanılır Divisible.
Martin Ender

İşte 41 Byte'da bir tane: Cases[Range[#^3],x_/;x^2∣(7^x-1)][[#]]&n ^ 3'ün bir üst sınır olduğu sezgisel argümanına dayanarak. Bu marjın içeremeyecek kadar dar olduğu bunun gerçekten muhteşem bir kanıtı keşfettim :)
Kelly Lowder

2

PARI / GP , 42 bayt

Oldukça basit. 1 dizinli, ancak bu kolayca değiştirilebilir.

n->=k=1;while(n--,while((7^k++-1)%k^2,));k

veya

n->=k=1;for(i=2,n,while((7^k++-1)%k^2,));k


1

R, 35 bayt

Bu sadece işe yarar n<=8.

z=1:20;which(!(7^z-1)%%z^2)[scan()]

Ancak, 50 baytn<=25 için çalışan daha uzun bir sürüm :

z=1:1e6;which(gmp::as.bigz(7^z-1)%%z^2==0)[scan()]

Bu sadece 8uzun bir int olduğu için işe yarıyor mu?
george

1
@george Evet, R varsayılan olarak 32 bit tamsayı olarak doğruluğu kaybedersiniz. Kodun ikinci sürümü, gmpkeyfi olarak büyük tamsayılara izin veren bir paket kullanır . Ancak, yukarıdaki herhangi bir şeyi hesaplamak için RAM'im hızla tükeniyor n=25.
17:53, rturnbull

0

PHP, 47 49 bayt

while($n<$argv[1])$n+=(7**++$x-1)%$x**2<1;echo$x;

Sadece n <9 için çalışır ( 64 bit ile 7**9daha büyüktür PHP_INT_MAX)

Rasgele uzunluk tamsayılarını kullanan 62 bayt : (test edilmedi; Makinemde PHP'nin bcmath'ı yok)

for($x=$n=1;$n<$argv[1];)$n+=bcpowmod(7,++$x,$x**2)==1;echo$x;

İle çalıştırın php -nr '<code>' <n>.

sahte kod

implicit: $x = 0, $n = 0
while $n < first command line argument
    increment $x
    if equation is satisfied
        increment $n
print $x

0

Pyke, 10 bayt

~1IX7i^tR%

Burada deneyin!

~1         -  infinite(1)
  IX7i^tR% - filter(^, not V)
    7i^    -    7**i
       t   -   ^-1
        R% -  ^ % v
   X       -   i**2
           - implicit: print nth value

0

Clojure , 83 bayt

(fn[n](nth(filter #(= 0(rem(-(reduce *(repeat % 7N))1)(* % %)))(iterate inc 1N))n))

Çevrimiçi deneyin!

Bu, 1'den başlayarak sonsuz bir Java BigInteger listesi oluşturur ve tanımına göre filtreler. Bu seçmek için sıfır tabanlı dizin kullanan olarak N inci süzüldü listeden değer.


0

Perl 5, 35 Bayt

Bu eksikti, işte burada:

map{$_ if!((7**$_-1)%($_**2))}1..<>


0

Powershell, çok fazla bayt

Sadece mümkün olup olmadığını görmek için.

[System.Linq.Enumerable]::Range(1,10000)|?{[System.Numerics.BigInteger]::Remainder([System.Numerics.BigInteger]::Pow(7,$_)-1,$_*$_) -eq 0}

0

Perl 6 , 35 34 bayt

{grep({(7**$_-1)%%$_²},^∞)[$_]}

0 endeksli.

Brad Gilbert sayesinde bir bayt kaldı.


grep bir altyordamdır, bu yüzden sonra parens koyarsanız alanı kaldırabilirsiniz{grep(…)}
Brad Gilbert b2gills

0

QBIC , 39 bayt

:{~(7^q-1)%(q^2)=0|b=b+1]~b=a|_Xq\q=q+1

QBasic 4.5 çalıştırmak için alamadım, ama QB64 iyi çalışıyor gibi görünüyor. Bazı açıklanamayan nedenlerden ötürü, QBasic 13,841,287,200'ü 144'e temiz bir şekilde bölmeyi reddediyor, bunun yerine -128'in geri kalanını veriyor. Daha sonra 16 yerine 12 yerine bu dizinin 7. terimi olarak döner.

:{      get N from the command line, start an infinite DO-loop
~       IF
(7^q-1) Part 1 of the formula (Note that 'q' is set to 1 as QBIC starts)
%       Modulus
(q^2)   The second part
=0      has no remainder
|b=b+1  Then, register a 'hit'
]       END IF
~b=a    If we have scored N hits
|_Xq    Quit, printing the last used number (q)
\q=q+1  Else, increase q by 1. 
        [DO-loop and last IF are implicitly closed by QBIC]

0

Harika , 28 bayt

@:^#0(!>@! % - ^7#0 1^#0 2)N

Sıfır endekslendi. Kullanımı:

(@:^#0(!>@! % - ^7#0 1^#0 2)N)2

Doğal sayılar listesinden x^2, bölünebilir olup olmadığını belirleyen bir yüklemle filtreler 7^x-1, ardından bu listedeki n. Öğeyi alır.


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.