Untitled
unknown
plain_text
a year ago
3.4 kB
9
Indexable
#include<bits/stdc++.h> #define ll long long using namespace std; const int M = 1e6 + 500; const ll dlt = 10289; ll nchildren[M]; ll inf = 1e6 - 1; ll mod(ll n){ n = n % dlt; if(n < 0) n += dlt; return n; } ll father(ll a){ for(ll i = 2; i * i <= a; i++) if(!(a % i)) return a / i; return 1; } ll num_divisors(int a){ int ans = 1; for(int i = 2; i*i <= a; i++){ int cnt = 0; while(!(a % i)){ a /= i; cnt ++; } ans *= (cnt + 1); } if(a != 1) ans *= 2; return ans; } void num_children(int n){ for(int i = 2; i <= n; i++){ nchildren[father(i)]++; } } bool check(ll n, ll a){ vector <ll> vec; for(int i = 2; i * i <= a; i++){ ll b = a / i; if(!(a % i)){ if(!vec.empty()){ if(i % vec.back()) vec.push_back(i); } else vec.push_back(i); } //// b : if(!(a % b)){ if(!vec.empty()){ if(b % vec.back()) vec.push_back(b); } else vec.push_back(b); } } if(vec.size() > 1) return 1; ll x = 1; while(x < a) x *= vec[0]; x *= vec[0]; if(x > n) return 1; return 0; } ll i_wana_be_a_spy(ll n){ ll ans = (1e12) * nchildren[n]; int u = father(n); if(num_divisors(u) >= 3 and num_divisors(u) <= 5) ans += (1e6) * nchildren[u]; else ans += (1e6) * inf; u = father(u); if(num_divisors(u) >= 3 and num_divisors(u) <= 5) ans += nchildren[u]; else ans += inf; return ans; } ll who_am_i(ll n){ const ll a = 1e12; return n / a; } ll who_is_myfather(ll n){ ll a = 1e12; n = n % a; a = 1e6; n /= a; return n; } ll who_is_mygrandfather(ll n){ ll a = 1e6; return n % a; } int main(){ ios::sync_with_stdio(0); //cin.tie(0); ll n, k; cin >> n >> k; multiset <ll> vec; num_children(n); for(ll i = 2; i <= n; i++){ if(num_divisors(i) == 3 or num_divisors(i) == 4 or num_divisors(i) == 5){ if(check(n, i)){ vec.insert(i_wana_be_a_spy(i)); } } } cout << "buge1" << endl; ll sum = 0; ll x = 0, y = 0, help = 0; while(!vec.empty() and who_am_i(*vec.begin()) == 0){ x++; ll u = who_is_myfather(*vec.begin()); ll v = who_is_mygrandfather(*vec.begin()); vec.erase(vec.begin()); if(u != inf) vec.insert((u - 1) * 1e12 + v * 1e6 + inf); } cout << vec.size() << endl; for(int i = 1; i <= k; i++){ if(!vec.empty()){ ll neww = *vec.begin() - 1e12; vec.erase(vec.begin()); vec.insert(neww); help ++; if(who_am_i(*vec.begin()) == 0){ x++; y += help; help = 0; ll u = who_is_myfather(*vec.begin()); ll v = who_is_mygrandfather(*vec.begin()); vec.erase(vec.begin()); if(u != inf) vec.insert((u - 1) * (1e12) + v * (1e6) + inf); } } ll A = mod(x * y); sum = mod(sum + mod(A * A)); } cout << sum << endl; return 0; }
Editor is loading...
Leave a Comment