#include <cstdio>
#include <algorithm>
using namespace std;
long long int gcd(long long int a, long long int b){
return b ? gcd(b, a%b) : a;
}
int main(void){
long long int N, array[100001], maxi = -1;
scanf("%lld", &N);
scanf("%lld", &array[0]);
for(int i=1; i<N; i++){
scanf("%lld", &array[i]);
array[i] -= array[0];
maxi = max(array[i], maxi);
}
long long int ans = gcd(array[1], array[2]);
for(int i=3; i<N; i++){
ans = gcd(array[i], ans);
}
printf("%d", maxi/ans-(N-1));
}
2485번: 가로수
첫째 줄에는 이미 심어져 있는 가로수의 수를 나타내는 하나의 정수 N이 주어진다(3≤N≤100,000). 둘째 줄부터 N개의 줄에는 각 줄마다 심어져 있는 가로수의 위치가 양의 정수로 주어지며, 가로수
www.acmicpc.net
첫번째 가로수부터 해당 간격마다 나무를 심을 때, 이미 심어져 있는 가로수를 포함해야 한다.
즉 첫번째 가로수부터의 거리 x마다 나무를 심는다면, 나머지 가로수들과의 거리가 모두 x의 배수여야한다.
모든 나무에서 첫번째 가로수의 거릴 빼주고, 최대공약수를 구해 나무를 심어주자.
유클리드 호제법을 이용한다면 최대공약수를 쉽게 구할 수 있다.
'BOJ 길라잡이' 카테고리의 다른 글
[C/C++ 백준 2580번] 스도쿠 (Gold 4) (0) | 2020.10.11 |
---|---|
[C/C++ 백준 2661번] 좋은수열 (Gold 4) (0) | 2020.10.11 |
[C/C++ 백준 15686번] 치킨 배달 (Gold 5) (0) | 2020.10.10 |
[C/C++ 백준 14889번] 스타트와 링크 (Silver 3) (0) | 2020.10.10 |
[C/C++ 백준 9663번] N-Queen (Gold 5) (0) | 2020.10.09 |