Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define vi vector<int>
- #define ll long long
- #define pb push_back
- #define mp make_pair
- #define ii pair<int,int>
- vector<long long> all_divisors(long long n){
- vector<long long> ans;
- for(long long a = 1; a*a <= n; a++){ // comparação que evita o uso de doubles, a <= sqrt(n) é o mesmo que a*a <= n
- if(n % a == 0){
- long long b = n / a;
- ans.push_back(a);
- if(a != b) ans.push_back(b);
- }
- }
- sort(ans.begin(), ans.end()); // frescura para retornar os divisores ordenados como na primeira implementação
- return ans;
- }
- vector<long long> EraseCommonDivisors(vector<long long> v1,const vector<long long> &v2)
- {
- for (int i = 0; i < v1.size(); ++i)
- {
- for (int j = 0; j < v2.size(); ++j)
- {
- if (v1[i] == v2[j])
- {
- v1.erase(v1.begin()+i);
- }
- }
- }
- return v1;
- }
- int main(){
- int n,m,x,y;
- int j =0;
- map<int ,vector<long long>> divs;
- scanf("%d %d",&m,&n);
- for (int i = 0; i < m; ++i)
- {
- scanf("%d %d",&x,&y);
- divs[i] = all_divisors(x);
- j = i;
- while(y > 0){
- divs[i] = EraseCommonDivisors(divs[i],divs[j-1]);
- y--;
- j--;
- }
- }
- for (int i = 0; i < m; ++i)
- {
- cout << divs[i].size() << endl;
- }
- return 0;
- }
- /*
- compilar
- g++ arquivo.cpp -std=c++11 -o executavel
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement