Advertisement
Tranvick

resp 2012 - 2-2

Apr 3rd, 2012
428
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.74 KB | None | 0 0
  1. #include <cstdio>
  2. #define N 1111111
  3.  
  4. using namespace std;
  5.  
  6. int a,b,n,m,phi[N];
  7. bool bs[N];
  8. long long ans;
  9.  
  10. long long getsum(int x){
  11.     return x*1ll*(x+1)/2;
  12. }
  13.  
  14. void calc_phi(int n){
  15.     for (int i=1;i<=n;i++) phi[i]=i;
  16.     for (int i=2;i<=n;i++){
  17.         if (bs[i]) continue;
  18.         for (int j=i;j<=n;j+=i){
  19.             bs[j]=1;
  20.             phi[j]-=phi[j]/i;
  21.         }
  22.     }
  23. }
  24.  
  25. void solve(int n,int m){
  26.     int k=n<?m;
  27.     for (int i=1;i<=k;i++) ans+=phi[i]*1ll*(n/i)*(m/i);
  28. }
  29.  
  30. int main(){
  31.     freopen("input.txt","r",stdin);
  32.     freopen("output.txt","w",stdout);
  33.     scanf("%d%d%d%d",&n,&m,&b,&a);
  34.     calc_phi(n<?m);
  35.     solve(a-1,b-1);
  36.     solve(a-1,m-b);
  37.     solve(n-a,b-1);
  38.     solve(n-a,m-b);
  39.     ans+=getsum(a-1)+getsum(b-1)+getsum(n-a)+getsum(m-b);
  40.     printf("%I64d\n",ans);
  41.     return 0;
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement