Official
C - Geometric Sequence Editorial
by
C - Geometric Sequence Editorial
by
mechanicalpenciI
\(A\) が等比数列であることの定義は、、
連続する \(2\) 項の比、すなわち \(\frac{A_{i+1}}{A_i}\) \((1\leq i\leq N-1)\) がすべて等しいことであり、
これは任意の \(1\leq i\leq N-2\) について、
\[ \frac{A_{i+1}}{A_{i}}=\frac{A_{i+2}}{A_{i+1}} \]
が成り立つことと言い換えられます。
しかし、このままでは分数を誤差なく比較する必要があります。
そこで、この式をさらに、
\[ A_{i+1}^2=A_{i}A_{i+2} \]
と変形させることで、整数の比較によって判定を行うことができます。
これは for 文と if 文によって実装することができます。
なお、各項 \(A_i,A_{i+1},A_{i+2}\) はそれぞれ \(10^9\) 以下の正整数であることから両辺は \(10^{18}\) 以下の正整数であり、\(64\) ビット整数型などを用いて比較することができます。
c++ の int など、\(32\) ビット整数型で比較を行うとオーバーフローを起こすため注意してください。
c++ による実装例:
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
long long a[100];
bool flag=true;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<(n-2);i++){
if((a[i]*a[i+2])!=(a[i+1]*a[i+1]))flag=false;
}
if(flag)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
Python による実装例:
n=int(input())
a=list(map(int, input().split()))
flag=True
for i in range(n-2):
if a[i]*a[i+2]!=a[i+1]*a[i+1]:
flag=False
if flag:
print("Yes")
else:
print("No")
posted:
last update:
