用数字x表示x ^ 2除以7 ^ x-1


16

任务

有一组数字x,可以x^2相除7^x-1

您的任务是找到这些数字。给定输入n,代码将打印遵循此规则的第n个数字。

示例1索引

In   Out
3    3
9    24
31   1140

相关序列可以在这里找到

规则

答案最短的将是赢家*

适用标准高尔夫规则

不允许有漏洞

您的答案可以是0或1索引,请在答案中注明


@nimi我在计划时写下了这些,但从未实现。我已经更新了问题
乔治

有什么限制n?我可以用给出正确的结果n=9,但是n=10已经给我带来了问题。
briantist

@briantist如果使用较高的输入值会得到错误的结果,则您的答案是错误的。如果只需要很长时间,那可能取决于实现。
mbomb007 '17

这不仅需要很长时间。n=10给我32 这是因为它开始使用double而不是整数,并且之后的mod错误。:(
briantist '17

Answers:


8

Haskell,34个字节

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

这使用基于0的索引。用法示例:([x|x<-[1..],mod(7^x-1)(x^2)<1]!!) 30-> 1140

它是该定义的直接实现。它建立所有数字的列表x并选择nth。


5

y,10个字节

e.f!%t^7Z*

接受整数输入并输出一个索引值的程序。

在线尝试!

怎么运行的

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个字节

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

由于JS的精度降低了事实,因此精度很快下降7**19。这是几乎任意精度的ES6版本:

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

对于测试用例31,此过程大约在一秒钟内完成。

一些更长的方法:

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个字节

µ7Nm<NnÖiN¼

在线尝试!

由于某些原因,我无法½上班,µ7Nm<NnÖ½N否则我将与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)


是的,我Ö在修复列表上经历了几个月的怪癖,但我从来没有去解决它。无论如何,如果堆栈为空,则不需要Nas µ自动输出最后一个N
Emigna '17

4

Python 2中48 46个字节

感谢@Dennis提供-2个字节!

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

单索引递归函数,它通过参数获取输入并返回结果。

在线尝试!(递归限制增加以允许最终测试用例运行)

怎么运行的

n是所需的索引,i是计数变量。

表达式~-7**i%i**2<1返回True(相当于1)如果i^2划分7^i - 1,和False(相当于0)否则。每次调用该函数时,都会从中减去表达式的结果nn每次找到匹配项时都会减少;i也增加了。

的短路行为and意味着当nis时00返回;这是基本情况。达到此要求后,递归将停止,i原始函数调用将返回的当前值。并非显式使用i,而是通过以下事实完成的:对于每个函数调用,都使用-~调用前面的进行了递增;递增0 i时间i根据需要给出。


1
(~-7**i%i**2<1)保存几个字节。
丹尼斯

@丹尼斯当然!谢谢。
TheBikingViking

3

Python 2中57个 53 51字节

-4字节归功于ETHproductions
-2字节归功于TuukkaX

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

在线尝试!
序列是1索引的


@ETHproductions yep c:
Rod

如果删除括号,测试用例是否会失败(7**i)?我删除了它们,对我尝试过的那些起作用。
Yytsi '17

@TuukkaX确实**~和具有更高的优先级-
Rod

2

Python 2,57字节

对于大值,这确实需要长时间。它还会占用大量内存,因为它会比必要的方式构建整个列表。结果为零索引。

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

在线尝试


出于好奇,是否有关于2**n+1上限的证据?
罗德

@Rod我不知道,但是考虑到50个值<5000,我敢肯定还有50个以上< 2**50。我可以使用9**n+9,但是需要更长的时间。我f(20)前一段时间开始跑步(带有2**n+1);它仍然没有完成。
mbomb007'1

我什至认为没有证据表明序列是无限的,更不用说第n个词的上界了!
格雷格·马丁

2

Mathematica,43个字节

我目前在此字节数下有三种不同的解决方案:

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

第一行中x ^ 2和(7 ^ x ...之间的字符是什么?它看起来像管道,但更短
Sefa

@Sefa这是数学“除”符号的Unicode字符,被Mathematica用作的运算符Divisible
马丁·恩德

这是一个41字节的文件:Cases[Range[#^3],x_/;x^2∣(7^x-1)][[#]]&基于启发式参数n ^ 3是上限。我发现了一个真正的绝妙证明,这个余量太窄了,无法包含:)
Kelly Lowder

2

PARI / GP,42个字节

非常简单。1索引,尽管可以轻松更改。

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

要么

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


1

R,35个字节

这仅适用于n<=8

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

但是,这是一个更长的版本,适用于n<=25,为50个字节

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

这是否只能8因为变成long int而起作用?
乔治,

1
@george是的,您会失去准确性,因为R默认为32位整数。该代码的第二个版本使用包gmp,该包允许任意大的整数。但是,我很快用光了RAM来计算以上内容n=25
rturnbull

0

PHP,47 49字节

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

仅适用于n <9(7**9大于PHP_INT_MAX64位)

62个字节,使用任意长度的整数:(未经测试;我的计算机上的PHP没有bcmath)

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

用运行php -nr '<code>' <n>

伪码

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

0

Pyke,10个字节

~1IX7i^tR%

在这里尝试!

~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个字节

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

在线尝试!

这将构建一个从1开始的Java BigInteger的无限列表,并按定义过滤它们。它使用基于零的索引来从过滤列表中选择第n 值。


0

Perl 5,35字节

好吧,这是丢失的,所以这里是:

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


0

Powershell,太多字节

只是看看是否有可能。

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

0

Perl 6的35个 34字节

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

0索引。

感谢Brad Gilbert削减了一个字节。


grep是一个子例程,因此如果您将括号放在后面,则可以删除空间{grep(…)}
Brad Gilbert b2gills

0

QBIC,39个字节

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

我无法使其在QBasic 4.5中运行,但在QB64中似乎运行良好。由于某些莫名其妙的原因,QBasic拒绝将13,841,287,200除以144,而是给出-128的余数。然后,它返回16作为该序列的第七项,而不是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

不可思议,28个字节

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

零索引。用法:

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

使用谓词从自然数列表中进行过滤,该谓词确定是否可以x^2被整除7^x-1,然后获取该列表中的第n个项目。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.