http://poj.org/problem?id=3090
法雷级数,,欧拉函数
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define maxn 1000005
#define INT __int64
int Prime[ maxn + 1 ] ;
INT ans[ maxn + 1 ] ;
void prime()
{
memset( Prime , 0 , sizeof( Prime ) ) ;
Prime[ 0 ] = Prime[ 1 ] = 1 ;
for( int i = 2 ; i * i <= maxn ; ++i )
{
if( !Prime[ i ] )
{
for( int j = i * i ; j <= maxn ; j += i )
Prime[ j ] = 1 ;
}
}
}
void enlerfun()
{
for( int i = 1 ; i <= maxn ; ++i )
ans[ i ] = i ;
for( int i = 2 ; i <= maxn ; ++i )
{
if( !Prime[ i ] )
for( int j = i ; j <= maxn ; j += i )
{
ans[ j ] = ans[ j ] / i * ( i - 1 ) ;
}
}
}
int main()
{
int Case ;
int n ;
prime() ;
enlerfun() ;
ans[ 1 ] = 3 ;
for( int i = 2 ; i <= maxn ; ++i )
ans[ i ] = ans[ i - 1 ] + ans[ i ] * 2;
scanf( "%d" , &Case );
for( int i = 1 ; i <= Case ; ++i )
{
scanf( "%d" , &n );
{
printf( "%d %d %I64d\n" , i , n , ans[ n ] ) ;
}
}
return 0 ;
}