它是算术几何序列吗?


11

一个等差-等比数列是算术序列和几何序列的的elementwise产物。例如,1 -4 12 -32是算术序列1 2 3 4和几何序列的乘积1 -2 4 -8。整数算术几何序列的第n个项可以表示为

an=rn(a0+nd)

对于某些实数d,非零实数r和整数a0。请注意,rd不一定是整数。

例如,所述序列2 11 36 100 256 624 1472 3392具有a0=2r=2,和d=3.5

输入值

的有序列表n2的整数作为输入的任何合理的格式。由于某些几何序列定义允许r=0并定义00=1,所以输入是否为算术几何序列将不取决于是否允许r为0。例如,123 0 0 0 0不会作为输入出现。

输出量

是否为算术几何序列。输出真实/虚假值或两个不同的一致值。

测试用例

真正:

1 -4 12 -32
0 0 0
-192 0 432 -1296 2916 -5832 10935 -19683
2 11 36 100 256 624 1472 3392
-4374 729 972 567 270 117 48 19
24601 1337 42
0 -2718
-1 -1 0 4 16
2 4 8 16 32 64
2 3 4 5 6 7
0 2 8 24

假:

4 8 15 16 23 42
3 1 4 1
24601 42 1337
0 0 0 1
0 0 1 0 0
1 -1 0 4 16

1
仅供参考,您可以使用内联数学模式,\$像写东西a0
FryAmTheEggman

确实有可能输入两个术语?测试用例中没有任何东西。
xnor

@xnor可以将设置1d设置0r=1d=0因此在这种情况下序列不是唯一的,但输出应始终是真实的
Giuseppe

1
建议测试用例0 2 8 24,0 0 1,0 0 0 1
tsh

1
1 -1 0 4 16将是一个有用的False案例,因为它与True案例1 -1 0 4 -16和共享四个连续的元素-1 -1 0 4 16
安德斯·卡塞格

Answers:


2

Perl 6的184个 128 135字节

{3>$_||->\x,\y,\z{?grep ->\r{min (x,{r&&r*$_+(y/r -x)*($×=r)}...*)Z==$_},x??map (y+*×sqrt(y²-x*z).narrow)/x,1,-1!!y&&z/y/2}(|.[^3])}

在线尝试!

根据前三个元素计算rd,并检查结果序列是否与输入匹配。不幸的是,Rakudo在被零除时会抛出异常,即使使用浮点数也要花费约9个字节。

使用枚举序列an=ran1+rnd

一些改进受到Arnauld的JavaScript答案的启发。

说明

3>$_||  # Return true if there are less than three elements

->\x,\y,\z{ ... }(|.[^3])}  # Bind x,y,z to first three elements

# Candidates for r
x  # If x != 0
??map (y+*×sqrt(y²-x*z).narrow)/x,1,-1  # then solutions of quadratic equation
!!y&&z/y/2  # else solution of linear equation or 0 if y==0

?grep ->\r{ ... },  # Is there an r for which the following is true?

    ( ,                         ...*)  # Create infinite sequence
     x  # Start with x
       {                       }  # Compute next term
        r&&  # 0 if r==0
                (y/r -x)  # d
           r*$_  # r*a(n-1)
                          ($×=r)  # r^n
                +        *  # r*a(n-1)+d*r^n
                                     Z==$_  # Compare with each element of input
min  # All elements are equal?

2

的JavaScript(ES7),135个 127字节

a=>!([x,y,z]=a,1/z)|!a.some(n=>n)|[y/x+(d=(y*y-x*z)**.5/x),y/x-d,z/y/2].some(r=>a.every((v,n)=>(v-(x+n*y/r-n*x)*r**n)**2<1e-9))

在线尝试!

怎么样?

rd<109

特例1:少于3个字词

如果少于3个字词,总是可以找到匹配的序列。因此,我们要求提供真实的价值。

特殊情况2:只有零

0a0=0d=0r0

a0=0

a0=0

an=rn×n×d

这使:

a1=r×da2=2r2×d

d0a10

r=a22a1

a00

an+1an

an+1=r.an+rn+1d

an+2

an+2=r.an+1+rn+2d=r(r.an+rn+1d)+rn+2d=r2an+2r.rn+1d=r2an+2r(an+1r.an)=r2an+2r.an+1

我们特别有:

一种2=-[R2一种0+2[R一种1个

导致以下二次方:

[R2一种0-2[R一种1个+一种2=0

谁的根源是:

r0=a1+a12a0a2a0r1=a1a12a0a2a0


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.