제출 #485312

#제출 시각아이디문제언어결과실행 시간메모리
485312errorgornSažetak (COCI17_sazetak)C++17
160 / 160
5 ms204 KiB
//雪花飄飄北風嘯嘯 //天地一片蒼茫 #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #include <ext/rope> using namespace std; using namespace __gnu_pbds; using namespace __gnu_cxx; #define ll long long #define ii pair<ll,ll> #define iii pair<ii,ll> #define fi first #define se second #define endl '\n' #define debug(x) cout << #x << ": " << x << endl #define pub push_back #define pob pop_back #define puf push_front #define pof pop_front #define lb lower_bound #define ub upper_bound #define rep(x,start,end) for(auto x=(start)-((start)>(end));x!=(end)-((start)>(end));((start)<(end)?x++:x--)) #define all(x) (x).begin(),(x).end() #define sz(x) (int)(x).size() #define indexed_set tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update> //change less to less_equal for non distinct pbds, but erase will bug mt19937 rng(chrono::system_clock::now().time_since_epoch().count()); long long inverse(long long a, long long m){ long long m0 = m; long long y = 0, x = 1; if (m == 1) return 0; while (a > 1) { // q is quotient long long q = a / m; long long t = m; // m is remainder now, process same as // Euclid's algo m = a % m, a = t; t = y; // Update y and x y = x - q * y; x = t; } // Make x positive if (x < 0) x += m0; return x; } int n,m; ll arr[10]; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin.exceptions(ios::badbit | ios::failbit); cin>>n>>m; n--; rep(x,0,m) cin>>arr[x]; int lim=1; rep(x,0,m) lim*=3; ll ans=0; rep(xx,0,lim){ ll x=xx; ll p=1,q=1; ll par=1; rep(y,0,m){ if (x%3==1) p=p*arr[y]/__gcd(p,arr[y]); else if (x%3==2) q=q*arr[y]/__gcd(q,arr[y]); if (x%3!=0) par*=-1; x/=3; if (p>1e9 || q>1e9) break; } if (p==1 || q==1) continue; if (p>1e9 || q>1e9) continue; if (__gcd(p,q)==1){ ll g=inverse(q,p); //g*q,(g+p)*q,(g+2p)*q; //cout<<(n+(p-g)*q)/(p*q)<<endl; ans+=par*(n+(p-g)*q)/(p*q); } } ll extra=0; rep(x,0,m) if (n%arr[x]==0) extra=1; cout<<ans+extra<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...