题意:容易理解.
分析:做了这道题,我的收获就是碰到一些数学题可以找规律,这种题用常规方法是无法解决的,所以只能找规律。
代码实现:
#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 。根据这个可以很快就推出来了。