Task: | Tekijät |
Sender: | jnalanko |
Submission time: | 2020-11-08 22:43:16 +0200 |
Language: | C++ (C++17) |
Status: | READY |
Result: | 100 |
group | verdict | score |
---|---|---|
#1 | ACCEPTED | 12 |
#2 | ACCEPTED | 35 |
#3 | ACCEPTED | 53 |
test | verdict | time | group | |
---|---|---|---|---|
#1 | ACCEPTED | 0.01 s | 1, 2, 3 | details |
#2 | ACCEPTED | 0.01 s | 1, 2, 3 | details |
#3 | ACCEPTED | 0.03 s | 2, 3 | details |
#4 | ACCEPTED | 0.07 s | 3 | details |
#5 | ACCEPTED | 0.58 s | 3 | details |
#6 | ACCEPTED | 0.39 s | 3 | details |
#7 | ACCEPTED | 0.54 s | 3 | details |
Code
#include <iostream>#include <vector>#include <map>//#include "stdlib_printing.hh"typedef int32_t LL;using namespace std;int main(){LL n; cin >> n;vector<LL> v(n);vector<LL> vcounts(1e6+1);LL xmax = 0;for(LL i = 0; i < n; i++){cin >> v[i];xmax = max(xmax, v[i]);vcounts[v[i]]++;}vector<bool> isprime(xmax+1,true); isprime[0] = false; isprime[1] = false;vector<vector<LL> > PD(xmax+1); // C[i] = Distinct prime divisors of i// vector<vector<LL> > D(xmax+1); // D[i] = Divisors of ivector<LL> C(xmax+1); // C[i] = Number of items in the input that are divisible by ifor(LL d = 2; d <= xmax; d++){for(LL k = 1; d*k <= xmax; k++){// D[d*k].push_back(d);if(isprime[d]) PD[d*k].push_back(d);if(k > 1) isprime[k*d] = false;C[d] += vcounts[d*k];}}/*for(LL x : v){for(LL d : D[x]) C[d]++;}*/long long ans = 0;for(LL x : v){if(x == 1){ans += n-1;continue;}LL m = PD[x].size();LL howmany = 0;for(LL mask = 1; mask < (1LL << m); mask++){LL ones = __builtin_popcount(mask);LL sign = ones % 2 == 1 ? 1 : -1;LL d = 1;for(LL i = 0; i < m; i++){if(mask & (1LL << i)) d *= PD[x][i];}howmany += sign * C[d];}ans += n - howmany;}cout << ans/2 << endl; // Divide by two because we report unordered pairs//cout << isprime << endl;//cout << PD << endl;//cout << D << endl;//cout << C << endl;}
Test details
Test 1
Group: 1, 2, 3
Verdict: ACCEPTED
input |
---|
100 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
correct output |
---|
3043 |
user output |
---|
3043 |
Test 2
Group: 1, 2, 3
Verdict: ACCEPTED
input |
---|
100 71 19 26 18 57 78 80 89 31 26 ... |
correct output |
---|
3086 |
user output |
---|
3086 |
Test 3
Group: 2, 3
Verdict: ACCEPTED
input |
---|
100000 66 87 90 67 93 89 57 29 34 4 8... |
correct output |
---|
3044751906 |
user output |
---|
3044751906 |
Test 4
Group: 3
Verdict: ACCEPTED
input |
---|
100000 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
correct output |
---|
3039650753 |
user output |
---|
3039650753 |
Test 5
Group: 3
Verdict: ACCEPTED
input |
---|
100000 238907 151373 522599 885657 37... |
correct output |
---|
3031155756 |
user output |
---|
3031155756 |
Test 6
Group: 3
Verdict: ACCEPTED
input |
---|
100000 510510 510510 510510 510510 51... |
correct output |
---|
0 |
user output |
---|
0 |
Test 7
Group: 3
Verdict: ACCEPTED
input |
---|
100000 999983 999983 999983 999983 99... |
correct output |
---|
0 |
user output |
---|
0 |