hdu 4279(规律题)

题意:容易理解.

分析:做了这道题,我的收获就是碰到一些数学题可以找规律,这种题用常规方法是无法解决的,所以只能找规律。

代码实现:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int main()
{
    int T;
    __int64 m,n;
    __int64 sum1,sum2;
    scanf( "%d", &T );
    while( T -- )
    {
        scanf( "%I64d%I64d", &m, &n );
        sum1 = ( m-1 - 4 ) / 2;
        sum2 = ( n - 4 ) / 2;
        if( (__int64)sqrt( m-1 ) % 2 == 1 )
            sum1 ++;
        if( (__int64)sqrt( n ) % 2 == 1 )
            sum2 ++;
        if( m-1 < 6 )
            sum1 = 0;
        if( n < 6 )
            sum2 = 0;
        printf( "%I64d\n", sum2-sum1 );
    }
    return 0;
}

注:后来才知道,当n>2的时候,n的欧拉函数永远是一个偶数。而且当n为平方数,其约数个数为奇数;
n为非平方数,其约数个数为偶数。而 f(x) = x - 约数个数 - 互质数个数 +1 。根据这个可以很快就推出来了。

 

posted on 2013-06-03 21:08  后端bug开发工程师  阅读(418)  评论(0编辑  收藏  举报

导航