常州大学新生寒假训练会试 B-对称

链接:https://www.nowcoder.net/acm/contest/78/B
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

萌新AA喜欢对称,最近她喜欢把棋子放进她的棋盘中,这个棋盘是由 N×M 个格 子构成的(1 <= N <= 1,000,000,000;1<=M<=1,000,000,000) 为了保证对称,AA  会以这样的方式摆放她的棋子。她把棋子放在棋盘正*的方格内, 如果不存在这样的方格,她就会停止。然后她以这个方格为中心把棋盘分成四部分,然后对于每 个小棋盘进行上述的操作。 下面是一个 N=7,M=15 的例子,其中'C'表示棋子
常州大学新生寒假训练会试 B-对称
这样子,需要 21个棋子。如果 N=M=5 的话,AA只需要摆放一个棋子,因为分成的四 个小棋盘分别是 2×2 的大小,无法在放进去新的棋子。现在,请你帮助 AA来计算,需要 多少个棋子。

输入描述:

一行两个整数 N,M

输出描述:

一行一个整数,即需要的棋子数

#include<stdio.h>
long fun(long n,long m){
if(n%2==0||m%2==0)
 return 0;
return fun(n/2,m/2)*4+1; 
  }
int main(){
long n,m;
scanf("%ld %ld",&n,&m); 
printf("%ld\n",fun(n,m));
return 0;
}