Official
		
			
				C - Geometric Sequence Editorial
			
			by 
		
		
		
			
		
		
			
	
			
				C - Geometric Sequence Editorial
			
			by  mechanicalpenciI
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:
				
			
