|
| 1 | +//LightOJ 1117-Helping Cicada |
| 2 | +#include <bits/stdc++.h> |
| 3 | +//#include "custom.h" |
| 4 | +using namespace std; |
| 5 | +#define MAX 1000000 |
| 6 | +#define INF INT_MAX |
| 7 | +#define LL long long |
| 8 | +#define ULL unsigned LL |
| 9 | +#define EPS 0.00000001 |
| 10 | +#define PI acos(-1.0) |
| 11 | +#define MOD 100000007LL |
| 12 | +#define pii pair<int,int> |
| 13 | +#define pll pair<LL,LL> |
| 14 | +#define ck(XX) cout<<XX<<endl |
| 15 | +#define Set(XX,PS) XX|(1<<PS) |
| 16 | +#define Reset(XX,PS) XX&(~(1<<PS)) |
| 17 | +#define Toggle(XX,PS) (XX^(1<<PS)) |
| 18 | +#define Check(XX,PS) (bool)(XX&(1<<PS)) |
| 19 | +#define SORT(v) sort(v.begin(),v.end()) |
| 20 | +#define REVERSE(V) reverse(v.begin(),v.end()) |
| 21 | +#define Fin freopen("input.txt","r",stdin) |
| 22 | +#define Fout freopen("output.txt","w",stdout) |
| 23 | +#define VALID(X,Y,R,C) X>=0 && X<R && Y>=0 && Y<C |
| 24 | +#define SIZE(ARRAY) sizeof(ARRAY)/sizeof(ARRAY[0]) |
| 25 | +#define MS(ARRAY,VALUE) memset(ARRAY,VALUE,sizeof(ARRAY)) |
| 26 | +#define FAST ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0) |
| 27 | +#define RT printf("Run Time : %0.3lf seconds\n", clock()/(CLOCKS_PER_SEC*1.0)) |
| 28 | +struct subset |
| 29 | +{ |
| 30 | + ULL element; |
| 31 | + char sign; |
| 32 | + |
| 33 | + subset() {}; |
| 34 | + subset(ULL element_, char sign_) {element = element_; sign = sign_;} |
| 35 | +}; |
| 36 | + |
| 37 | + |
| 38 | +ULL gcd(ULL a, ULL b) |
| 39 | +{ |
| 40 | + if(b==0) return a; |
| 41 | + if(a%b == 0) return b; |
| 42 | + return gcd(b, a%b); |
| 43 | +} |
| 44 | + |
| 45 | +ULL lcm(ULL a, ULL b) |
| 46 | +{ |
| 47 | + return (a*b)/gcd(a,b); |
| 48 | +} |
| 49 | + |
| 50 | +vector <subset> subsetA; |
| 51 | +void subsetGenerate(vector<ULL>v, ULL position, ULL element, ULL size, ULL noe) |
| 52 | +{ |
| 53 | + if(position == size) |
| 54 | + { |
| 55 | + if(noe == 0) return; |
| 56 | + if(noe%2 == 0) subsetA.push_back(subset(element,'-')); |
| 57 | + else subsetA.push_back(subset(element,'+')); |
| 58 | + return; |
| 59 | + } |
| 60 | + |
| 61 | + subsetGenerate(v, position+1, lcm(element,v[position]), size, noe+1); |
| 62 | + subsetGenerate(v, position+1, element, size, noe); |
| 63 | + |
| 64 | + return; |
| 65 | +} |
| 66 | + |
| 67 | + |
| 68 | + |
| 69 | +int main() |
| 70 | +{ |
| 71 | + FAST; |
| 72 | + //Fin; |
| 73 | + //Fout; |
| 74 | + ULL tc, cn=0; |
| 75 | + cin >> tc; |
| 76 | + while(tc--) |
| 77 | + { |
| 78 | + subsetA.clear(); |
| 79 | + ULL n,m; |
| 80 | + cin >>n>>m; |
| 81 | + |
| 82 | + vector <ULL> setA; |
| 83 | + for(ULL i=0; i<m; i++) {ULL temp; cin>>temp; setA.push_back(temp);} |
| 84 | + subsetGenerate(setA,0,1,setA.size(),0); |
| 85 | + |
| 86 | + ULL ans=0; |
| 87 | + for(ULL i=0; i<subsetA.size(); i++) |
| 88 | + { |
| 89 | + ULL temp = n/subsetA[i].element; |
| 90 | + if(subsetA[i].sign == '+') ans += temp; |
| 91 | + else ans -= temp; |
| 92 | + } |
| 93 | + |
| 94 | + ans = n-ans; |
| 95 | + printf("Case %llu: %llu\n", ++cn, ans); |
| 96 | + } |
| 97 | + |
| 98 | + return 0; |
| 99 | +} |
0 commit comments