好奇的素数公式


17

给定正整数n输出整数ab(形成减小的分数a / b),使得:

公式a / b = k = 1至n的乘积:(p_k ^ 2-1-1)/(p_k ^ 2 +1)

其中p k是第k个素数(p 1 = 2)。

例子:

1   -> 3, 5
2   -> 12, 25
3   -> 144, 325
4   -> 3456, 8125
5   -> 41472, 99125
15  -> 4506715396450638759507001344, 11179755611058498955501765625
420 -> very long

允许概率素数检查,如果由于语言整数类型的限制而导致答案失败,也可以。


以字节为单位的最短代码获胜。


我们还能3.0代替输出3吗?
阿德南

2
@AandN我想...但是,请确保您的程序对于所有输入都是正确的,并且对于大输入不会遭受浮点错误的困扰。
orlp

我们可以输出ab作为有理类型吗?
Alex A.

2
@AlexA。仅当输出清楚地显示两个整数时。
orlp

1
@SamYonnou那些已经存在,但是滥用本机数字类型来解决问题是默认情况下禁止的漏洞之一。
丹尼斯

Answers:


6

M,9个字节

RÆN²‘İḤCP

在线尝试!

琐事

认识M!

M是Jelly的一个分支,旨在解决数学难题。Jelly和M之间的核心区别在于,M对所有内部计算都使用无限精度,以象征性的方式表示结果。一旦M变得更加成熟,Jelly将会逐渐变得多用途,而不是数学化。

M是正在进行很多工作(完全错误的,并没有真正的是不同的果冻现在),但它就像一个魅力迎接这一挑战,我只是无法抗拒。

怎么运行的

RÆN²‘İḤCP  Main link. Argument: n

R          Range; yield [1, ..., n].
 ÆN        Compute the kth primes for each k in that range.
   ²‘      Square and increment each prime p.
     İ     Invert; turn p² + 1 into the fraction 1 / (p² + 1).
      Ḥ    Double; yield 2 / (p² + 1).
       C   Complement; yield 1 - 2 / (p² + 1).
        P  Product; multiply all generated differences.

ÆN唯一的M特定运算符吗?还梅利
CalculatorFeline

这些运算符都不是M特有的。区别在于M会计算分数,而Jelly会计算浮点数。
丹尼斯

9

Mathematica,32个字节

1##&@@(1-2/(Prime@Range@#^2+1))&

使用整数输入并返回实际分数的未命名函数。

这利用了事实。由于Mathematica将所有基本算术都遍历列表,因此代码得以精打细算。因此,我们首先创建一个列表,然后检索所有这些质数并将该列表插入上面的表达式中。这给了我们所有因素的清单。最后,我们通过应用列表来将所有内容相乘,可以打到。(p2-1)/(p2+1) = 1-2/(p2+1){1, 2, ..., n}Times1##&

另外,我们可以使用Array相同的字节数:

1##&@@(1-2/(Prime~Array~#^2+1))&

1-2= 1,对吗?
CalculatorFeline

@CatsAreFluffy是的(-1实际上),但是1-2/x ≠ -1/x。;)
Martin Ender

@Range@±~Array~
计算器猫

6

Python 2,106字节

from fractions import*
n=input()
F=k=P=1
while n:b=P%k>0;n-=b;F*=1-Fraction(2*b,k*k+1);P*=k*k;k+=1
print F

第一行和第四行的伤害如此之大...事实证明,即使在驻留于的Python 3.5+中,使用Fraction总比单独乘以使用要好。gcdgcdmath

素数一代改编自@xnor的答案 在这里,它使用威尔逊定理。


5

红宝石122 77 65字节

感谢Sherlock削减了10个字节。

require'prime'
->n{Prime.take(n).map{|x|1-2r/(x*x+1)}.reduce(:*)}

定义一个带数字并返回的匿名函数Rational


4

PARI / GP,33字节

n->prod(i=1,n,1-2/(prime(i)^2+1))

备用版本(46字节):

n->t=1;forprime(p=2,prime(n),t*=1-2/(p^2+1));t

非竞争版本给出浮点(t_REAL)结果(38字节):

n->prodeuler(p=2,prime(n),1-2/(p^2+1))

4

果冻14 13 字节

RÆN²µ’ż‘Pµ÷g/

在线尝试!感谢@Dennis提供-1个字节。

R                       Range [1..n]
 ÆN                     Nth prime
   ²                    Square
    µ                   Start new monadic chain
     ’ż‘                Turn each p^2 into [p^2-1, p^2+1]
        P               Product
         µ              Start new monadic chain
          ÷             Divide by...
           g/           Reduce GCD

4

Pyth, 26 25

/RiFN=N*MCm,tdhd^R2.fP_ZQ

在此处尝试或运行测试套件

感谢Jakube,节省了1个字节!

规范的执行非常幼稚。使用漂亮的“ new”(我不知道何时添加它,但我从未见过)P<neg>,它返回负数的正值是否为质数。某些贴图等可能会打高尔夫球...


3

朱莉娅,59 42字节

n->prod(1-big(2).//-~primes(2n^2)[1:n].^2)

这是一个匿名函数,它接受整数并返回RationalBigInt分子和分母的。

我们首先生成小于2 n 2的素数列表,然后选择前n个元素。之所以起作用,是因为对于所有n > 1,第n个素数始终小于n 2请参见此处。)。

对于选择的n个素数中的每个p,我们使用元素幂()对p求平方,并构造有理数2 /(p + 1),其中2首先转换为a 以确保足够的精度。我们从1中减去此值,取所得的有理数组的乘积,然后返回所得的有理。.^2BigInt

用法示例:

julia> f = n->prod(1-big(2).//-~primes(2n^2)[1:n].^2)
(anonymous function)

julia> f(15)
4506715396450638759507001344//11179755611058498955501765625

通过Sp3000保存了17条!


2

凸,28个字节

Convex是我正在开发的一种新语言,主要基于CJam和Golfscript。解释器和IDE可以在这里找到。输入是命令行参数中的整数。索引是基于一的。使用CP-1252编码。

,:)_{µ²1-}%×\{µ²1+}%׶_:Ðf/p

您可能会或可能不会认为此答案具有竞争性,因为我正在开发该程序在发布挑战之前使用的一些功能,但是一旦我看到此挑战消失就进行了提交。


2

MATL,18字节

:Yq2^tqpwQpZd1Mhw/

在线尝试!

大型输入失败,因为仅整数不超过 2^52在内部只能精确表示。

说明

:     % implicitly take input n. Generate range [1,...,n]
Yq    % first n prime numbers
2^    % square
tqp   % duplicate. Subtract 1. Product
wQp   % swap. Add 1. Product
Zd    % gcd of both products
1M    % push the two products again
h     % concatenate horizontally
w/    % swap. Divide by previously computed gcd. Implicitly display

2

Mathematica,45个字节

Times@@Array[(Prime@#^2-1)/(Prime@#^2+1)&,#]&

素数?分数?Mathematica。


1

Haskell,53个字节

匿名函数,53个字符:

(scanl(*)1[1-2%(p*p+1)|p<-nubBy(((>1).).gcd)[2..]]!!)

在此处尝试(注意:在标准GHCi中,您首先需要确定Data.RatioData.List已导入):

λ (scanl(*)1[1-2%(p*p+1)|p<-nubBy(((>1).).gcd)[2..]]!!) 5
41472 % 99125
:: Integral a => Ratio a

Haskell的列表索引!!基于0。(___!!)是一个操作员部分,形成一个匿名功能,使得(xs !!) n == xs !! n

生成整个序列要少四个字节:

λ mapM_ print $ take 10 $     -- just for a nicer output
    scanl(*)1[1-2%(n*n+1)|n<-[2..],all((>0).rem n)[2..n-1]]
1 % 1
3 % 5
12 % 25
144 % 325
3456 % 8125
41472 % 99125
3483648 % 8425625
501645312 % 1221715625
18059231232 % 44226105625
4767637045248 % 11719917990625
:: IO ()

0

严重的是25个字节

,r`PªD;⌐k`M┬`π`Mi│g;)@\)\

输出a\nb\n是换行符)。大型输入将花费很长时间(并且可能由于内存不足而失败),因为质数生成非常慢。

在线尝试!

说明:

,r`PªD;⌐k`M┬`π`Mi│g;)@\)\
,r                         push range(input)
  `PªD;⌐k`M                map:
   P                         k'th prime
    ª                        square
     D                       decrement
      ;                      dupe
       ⌐                     add 2 (results in P_k + 1)
        k                    push to list
           ┬               transpose
            `π`M           map product
                i│         flatten, duplicate stack
                  g;)      push two copies of gcd, move one to bottom of stack
                     @\    reduce denominator
                       )\  reduce numerator

标题看起来很有趣。我将其读为“ Seriously,25 bytes ?!”
cdt

@AlexKChen自从我创建该语言以来已经快两年了,并且现在才获得回报:)
Mego
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.