Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <cstring>
- #include <cmath>
- #include <iostream>
- #include <sstream>
- #include <algorithm>
- #include <string>
- #include <vector>
- #include <queue>
- #include <stack>
- #include <map>
- #include <set>
- using namespace std;
- #define MAXN 1000000
- int mu[MAXN + 1],factor[MAXN + 1];
- long long visible(int X, int Y){
- if(X == 0 || Y == 0) return 1;
- long long ret = 2;
- for(int i = 1;i <= min(X,Y);++i)
- ret += mu[i] * (X / i) * (Y / i);
- return ret;
- }
- long long visible(int X, int Y, int Z){
- long long ret = 0;
- for(int i = 1;i <= X;++i)
- ret += mu[i] * (X / i) * (Y / i) * (Z / i);
- return ret;
- }
- int main(){
- ios::sync_with_stdio(0);
- memset(factor,-1,sizeof factor);
- mu[1] = 1;
- for(int i = 2;i <= MAXN;++i){
- if(factor[i] == -1){
- mu[i] = -1;
- if(i <= MAXN / i)
- for(int j = i*i;j <= MAXN;j += i)
- factor[j] = i;
- }else{
- int cont = 0,aux = i,p = factor[i];
- while(aux % p == 0 && cont < 2){
- aux /= p;
- ++cont;
- }
- if(cont == 2) mu[i] = 0;
- else mu[i] = -mu[i / p];
- }
- }
- int X,Y,Z;
- cin >> X >> Y >> Z;
- long long ans = visible(X,Y,Z) + visible(X,Y) + visible(Y,Z) + visible(Z,X);
- if(X >= 1) --ans;
- if(Y >= 1) --ans;
- if(Z >= 1) --ans;
- cout << ans << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement