题目分析:
欧拉函数是指:对于一个正整数n,小于n且和n互质的正整数(包括1)的个数,记作φ(n) 。
通式:φ(x)=x*(1-1/p1)*(1-1/p2)*(1-1/p3)*(1-1/p4)…..(1-1/pn),其中p1, p2……pn为x的所有质因数,x是不为0的整数。φ(1)=1(唯一和1互质的数就是1本身)。
代码如下:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std ;
#pragma comment(linker, "/STACK:16777216")
#define rep( i , a , b ) for ( int i = ( a ) ; i < ( b ) ; ++ i )
#define rev( i , a , b ) for ( int i = ( a ) ; i >= ( b ) ; -- i )
#define For( i , a , b ) for ( int i = ( a ) ; i <= ( b ) ; ++ i )
#define clr( a , x ) memset ( a , x , sizeof a )
#define cpy( a , x ) memcpy ( a , x , sizeof a )
const int MAXN = 10005 ;
int phi[MAXN] ;
int n ;
void get_prime () {
rep ( i , 1 , MAXN ) phi[i] = i ;
rep ( i , 2 , MAXN ) if ( phi[i] == i ) {
for ( int j = i ; j < MAXN ; j += i ) {
phi[j] = phi[j] / i * ( i - 1 ) ;
}
}
}
int main () {
get_prime () ;
while ( ~scanf ( "%d" , &n ) ) printf ( "%d\n" , phi[n] ) ;
return 0 ;
}