백준 2485 c++
#include <iostream>
#include <vector>
using namespace std;
int input(int lower, int upper);
void input_original_trees(vector <int>& tree, int tree_num);
void check_distance_trees(vector <int> tree, vector <int> &distance);
int find_GCM_vector(vector <int> distance);
int find_GCM(int A, int B);
int find_num_new_trees(vector <int> tree, int GCM);
int main(void)
{
int N;
int count = 0;
int GCM;
vector <int> original_tree;
vector <int> distance;
N = input(3, 100000);
input_original_trees(original_tree, N);
check_distance_trees(original_tree, distance);
GCM = find_GCM_vector(distance);
count = find_num_new_trees(original_tree, GCM);
cout << count << "\n";
return 0;
}
int input(int lower, int upper)
{
int A;
while (1)
{
cin >> A;
if (A >= lower && A <= upper)
{
break;
}
else
{
;
}
}
return A;
}
void input_original_trees(vector <int> &tree, int tree_num)
{
//cout << "input_original_trees" << endl;
int i;
int temp;
for (i = 0; i < tree_num; i++)
{
temp = input(1, 1000000000);
tree.push_back(temp);
}
return;
}
void check_distance_trees(vector <int> tree, vector <int>& distance)
{
//cout << "check_distance_trees" << endl;
int i;
for (i = 0; i < tree.size() - 1; i++)
{
distance.push_back(tree[i + 1] - tree[i]);
}
return;
}
int find_GCM_vector(vector <int> distance)
{
//cout << "find_GCM_vector" << endl;
int i;
int temp;
temp = distance[0];
for (i = 1; i < distance.size(); i++)
{
temp = find_GCM(temp, distance[i]);
}
return temp;
}
int find_GCM(int A, int B)
{
//cout << "find_GCM" << endl;
int temp;
if (A < B)
{
temp = B;
B = A;
A = temp;
}
else
{
;
}
while (B != 0)
{
temp = A % B;
A = B;
B = temp;
}
return A;
}
int find_num_new_trees(vector <int> tree, int GCM)
{
//cout << "find_num_new_trees" << endl;
int i;
int count = 0;
int temp;
temp = tree.front();
while (temp != tree.back())
{
temp = temp + GCM;
count++;
}
count = count - (tree.size() - 1);
return count;
}