Các số x sao cho x ^ 2 chia 7 ^ x-1


16

Bài tập

Có một bộ số x, chẳng hạn như x^2chia 7^x-1.

Nhiệm vụ của bạn là tìm những con số này. Cho đầu vào là n, mã sẽ in số thứ n theo quy tắc này.

Ví dụ 1 chỉ mục

In   Out
3    3
9    24
31   1140

Trình tự liên quan có thể được tìm thấy ở đây .

Quy tắc

Câu trả lời ngắn nhất sẽ là người chiến thắng *

Quy tắc chơi golf tiêu chuẩn được áp dụng

Lỗ hổng không được phép

Câu trả lời của bạn có thể là 0 hoặc 1 được lập chỉ mục, vui lòng nêu trong câu trả lời của bạn


@nimi Tôi đã viết chúng xuống khi lập kế hoạch và không bao giờ thực hiện chúng. Tôi đã cập nhật câu hỏi
george

Các giới hạn của là ngì? Tôi có thể đưa ra kết quả chính xác với n=9, nhưng n=10đã gây ra sự cố cho tôi.
nghĩa tự do

@briantist Nếu bạn nhận được kết quả sai cho các giá trị đầu vào cao hơn, câu trả lời của bạn là sai. Nếu nó chỉ mất một thời gian dài, điều đó có thể phụ thuộc vào việc thực hiện.
mbomb007

Nó không chỉ mất một thời gian dài. n=10cho tôi 32; Đó là bởi vì nó bắt đầu sử dụng gấp đôi thay vì số nguyên và mod đã sai sau đó. :(
briantist

Câu trả lời:


8

Haskell, 34 byte

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

Điều này sử dụng lập chỉ mục dựa trên 0. Ví dụ sử dụng: ([x|x<-[1..],mod(7^x-1)(x^2)<1]!!) 30-> 1140.

Đó là một thực hiện trực tiếp của định nghĩa. Nó xây dựng một danh sách tất cả các số xvà chọn nthứ.


5

Bình thường , 10 byte

e.f!%t^7Z*

Một chương trình lấy đầu vào của một số nguyên và in một giá trị một chỉ mục.

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

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 byte

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

Điều này làm mất độ chính xác khá nhanh do thực tế là JS mất độ chính xác 7**19. Đây là phiên bản ES6 gần như chính xác tùy ý:

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

Điều này kết thúc trong khoảng một giây cho trường hợp thử nghiệm 31.

Một vài cách tiếp cận dài hơn:

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 byte

µ7Nm<NnÖiN¼

Hãy thử trực tuyến!

Vì một số lý do, tôi không thể ½làm việc µ7Nm<NnÖ½Nhoặc tôi sẽ bị trói buộc với Pyth.

µ           # 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)

.


Vâng, tôi đã Ögiải quyết vấn đề đó trong nhiều tháng nhưng tôi không bao giờ giải quyết được. Dù sao, bạn không cần Nnhư µtự động kết quả đầu ra cuối cùng Nnếu ngăn xếp rỗng.
Emigna

4

Python 2 , 48 46 byte

Cảm ơn @Dennis cho -2 byte!

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

Hàm đệ quy một chỉ mục nhận đầu vào thông qua đối số và trả về kết quả.

Hãy thử trực tuyến! (Giới hạn đệ quy tăng để cho phép trường hợp thử nghiệm cuối cùng chạy)

Làm thế nào nó hoạt động

nlà chỉ số mong muốn và ilà biến đếm.

Biểu thức ~-7**i%i**2<1trả về True(tương đương 1) nếu i^2chia 7^i - 1False(tương đương 0) nếu không. Mỗi lần hàm được gọi, kết quả của biểu thức sẽ bị trừ đi n, giảm dần nmỗi lần tìm thấy lần truy cập; icũng được tăng lên.

Hành vi ngắn mạch của andphương tiện khi nđược 0, 0được trả lại; đây là trường hợp cơ sở Khi đạt được điều này, đệ quy dừng lại và giá trị hiện tại iđược trả về bởi lệnh gọi hàm ban đầu. Thay vì sử dụng rõ ràng i, điều này được thực hiện bằng cách sử dụng thực tế là với mỗi lệnh gọi hàm, một bước tăng đã được thực hiện bằng cách sử dụng -~phía trước cuộc gọi; tăng 0 ithời gian cho i, theo yêu cầu.


1
(~-7**i%i**2<1)tiết kiệm một vài byte.
Dennis

@Dennis Tất nhiên rồi! Cảm ơn.
TheBikingViking

3

Python 2 , 57 53 51 byte

-4 byte nhờ vào ETHproductions
-2 byte nhờ TuukkaX

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

Hãy thử trực tuyến!
chuỗi là 1 chỉ mục


@ETHproductions yep c:
Rod

Liệu một testcase thất bại nếu bạn loại bỏ các dấu ngoặc đơn xung quanh (7**i)? Tôi loại bỏ chúng và nó đã làm việc cho những cái tôi đã thử.
Yytsi

@TuukkaX thực sự, **có quyền ưu tiên cao hơn ~-
Rod

2

Python 2, 57 byte

Điều này cần một thời gian thực sự, thực sự dài cho các giá trị lớn. Nó cũng sử dụng nhiều bộ nhớ, bởi vì nó xây dựng toàn bộ danh sách cách xa hơn mức cần thiết. Kết quả là không có chỉ mục.

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

Dùng thử trực tuyến


Vì tò mò, có bằng chứng nào cho 2**n+1giới hạn trên không?
Rod

@Rod Không phải tôi biết, nhưng xem xét rằng có 50 giá trị <5000, tôi chắc chắn có nhiều hơn 50 < 2**50. Tôi có thể sử dụng 9**n+9, nhưng mất nhiều thời gian hơn. Tôi bắt đầu chạy f(20)một lúc trước (với 2**n+1); nó vẫn chưa hoàn thành
mbomb007

Tôi thậm chí không nghĩ rằng có một bằng chứng cho thấy trình tự là vô hạn, chứ đừng nói đến một giới hạn trên tốt đẹp cho thuật ngữ thứ n!
Greg Martin

2

Toán học, 43 byte

Hiện tại tôi đã có ba giải pháp khác nhau ở số byte này:

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,#]&

Ký tự giữa x ^ 2 và (7 ^ x ... trong dòng đầu tiên là gì? Nó trông giống như một đường ống nhưng ngắn hơn
Sefa

@Sefa Đó là ký tự Unicode cho biểu tượng "chia" toán học và được Mathicala sử dụng làm toán tử cho Divisible.
Martin Ender

Đây là một ở 41 Byte: Cases[Range[#^3],x_/;x^2∣(7^x-1)][[#]]&dựa trên lập luận heuristic rằng n ^ 3 là giới hạn trên. Tôi đã phát hiện ra một bằng chứng thực sự tuyệt vời về điều này, mà biên độ này quá hẹp để chứa :)
Kelly Lowder

2

PARI / GP , 42 byte

Khá đơn giản. 1 chỉ mục, mặc dù điều này có thể dễ dàng thay đổi.

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

hoặc là

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


1

R, 35 byte

Điều này chỉ hoạt động cho n<=8.

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

Tuy nhiên, đây là phiên bản dài hơn, hoạt động n<=25với 50 byte :

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

Điều này chỉ hoạt động lên 8vì nó trở thành một int dài?
george

1
@george Có, bạn mất độ chính xác khi R mặc định là số nguyên 32 bit. Phiên bản thứ hai của mã sử dụng một gói, gmpcho phép các số nguyên lớn tùy ý. Tuy nhiên, tôi nhanh chóng hết RAM để tính toán bất cứ thứ gì ở trên n=25.
rturnbull

0

PHP, 47 49 byte

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

Chỉ hoạt động với n <9 ( 7**9lớn hơn PHP_INT_MAXvới 64 bit)

62 byte sử dụng số nguyên có độ dài tùy ý: (chưa được kiểm tra; PHP trên máy của tôi không có tính năng bcmath)

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

Chạy với php -nr '<code>' <n>.

mã giả

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


0

Clojure , 83 byte

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

Hãy thử trực tuyến!

Điều này xây dựng một danh sách vô hạn các Java BigIntegers bắt đầu từ 1 và lọc chúng theo định nghĩa. Nó sử dụng lập chỉ mục dựa trên zero để chọn giá trị thứ n từ danh sách được lọc.


0

Perl 5, 35 byte

Vâng, điều này đã bị mất, vì vậy đây là:

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


0

Powershell, quá nhiều byte

Chỉ để xem nếu nó có thể và nó là.

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

0

Perl 6 , 35 34 byte

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

Chỉ số 0.

Cạo sạch một byte nhờ Brad Gilbert.


grep là một chương trình con, do đó bạn có thể loại bỏ khoảng {grep(…)}
trắng

0

QBIC , 39 byte

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

Tôi không thể chạy nó trong QBasic 4.5, nhưng có vẻ như nó chạy tốt trong QB64. Vì một số lý do không thể giải thích được, QBasic từ chối phân chia sạch sẽ 13,841,287,200 cho 144, nhưng thay vào đó, phần còn lại là -128. Sau đó, nó trả về 16 là số hạng thứ 7 của chuỗi này thay vì 12 ...

:{      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

Kỳ quan , 28 byte

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

Không có chỉ mục. Sử dụng:

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

Các bộ lọc từ danh sách các số tự nhiên có một vị từ xác định xem x^2có chia hết cho hay không 7^x-1, sau đó lấy mục thứ n trong danh sách đó.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.