您的位置:首页 > 其它

Highways

2013-09-28 19:20 453 查看
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=32290#problem/C

// File Name: uvala3720.cpp
// Author: bo_jwolf
// Created Time: 2013年09月28日 星期六 18:58:58

#include<vector>
#include<list>
#include<map>
#include<set>
#include<deque>
#include<stack>
#include<bitset>
#include<algorithm>
#include<functional>
#include<numeric>
#include<utility>
#include<sstream>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime>

using namespace std;
const int maxn = 305 ;
int gcd[ maxn ][ maxn ] ;

int Gcd( int a , int b )
{
return b == 0 ? a : Gcd( b , a % b ) ;
}

int main()
{
for( int i = 1 ; i < maxn ; ++i )
{
for( int j = i ; j < maxn ; ++j )
{
gcd[ i ][ j ] = Gcd( i , j ) ;
}
}
int n  , m , temp;
long long int ans ;
while( scanf( "%d%d" , &n , &m ) != EOF )
{
if( !n && !m )
{
break ;
}
ans = 0  ;
if( n > m )
swap( n , m ) ;
for( int i = 1 ; i < n ;++i )
{
for( int j = i ; j < m ; ++j )
{
if( gcd[ i ][ j ] <= 2 )
{
if( i == j )
{
temp = ( n - i  ) * ( m - j  ) ;
if( gcd[ i ][ j ] == 1 )
{
ans += temp ;
}
else
{
ans -= temp ;
}
}
else
{
temp = ( n - i  ) * ( m - j  ) ;
if( i < m && j < n )
{
temp += ( m - i  ) * ( n - j  ) ;
}
if( gcd[ i ][ j ] == 1 )
{
ans += temp ;
}
else
{
ans -= temp ;
}
}
}
}
}
ans *= 2 ;
printf( "%lld\n" , ans ) ;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  math of basic one fo