immuntasir

Helping Cicada

Sep 19th, 2015
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.92 KB | None | 0 0
  1. #include <cstdio>
  2. #define ll long long
  3. long long int ans;
  4. long long int gcd(long long int a, long long int b) {
  5. while(b)
  6. b ^= a ^= b ^= a %= b;
  7. return a;
  8. }
  9. long long int lcm(ll int a, long long int b) {
  10. return a*b/gcd(a,b);
  11. }
  12. long long int recurs(ll int ara[], ll i, ll j, ll num, ll numofele, ll n) {
  13. if (numofele == num) return 0;
  14. ll x, y;
  15. for (x = i; x <numofele; x++) {
  16. y = lcm(ara[x], j);
  17.  
  18. if ((num+1) & 1) ans+=(n/y);
  19. else ans-=(n/y);
  20. recurs(ara, x+1, y, num+1, numofele, n);
  21. }
  22. }
  23. int main() {
  24. int T;
  25. int cs =1;
  26. scanf("%d", &T);
  27. while (T--) {
  28. long long int n, m, i;
  29. scanf("%lld %lld", &n, &m);
  30. long long int ara[m];
  31. for (i=0; i<m; i++) scanf("%lld", &ara[i]);
  32. ans = 0;
  33. recurs(ara, 0, 1, 0, m, n);
  34. printf("Case %d: %lld\n",cs++, n-ans);
  35. }
  36. return 0;
  37. }
Advertisement
Add Comment
Please, Sign In to add comment