mirror of
https://hub.njuu.cf/TheAlgorithms/C-Plus-Plus.git
synced 2023-10-11 13:05:55 +08:00
added euler totient function
This commit is contained in:
parent
f4e1f7f58a
commit
56cfe3f041
37
Math/eulerTotient.cpp
Normal file
37
Math/eulerTotient.cpp
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#include<iostream>
|
||||||
|
#include<cmath>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
/*
|
||||||
|
this function calculate euler totien function
|
||||||
|
*/
|
||||||
|
|
||||||
|
long long eulerTotient(long long n){
|
||||||
|
|
||||||
|
if(n == 1) return 1;
|
||||||
|
long long result = 1LL;
|
||||||
|
long long temp = n;
|
||||||
|
for(int i = 2; i <= floor(sqrt(n)) + 10; i++) {
|
||||||
|
if( temp % i == 0) {
|
||||||
|
int j = 0;
|
||||||
|
while(temp % i == 0){
|
||||||
|
j ++;
|
||||||
|
temp /= i;
|
||||||
|
}
|
||||||
|
result = result * pow(i,j-1) * (i-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(temp == n){
|
||||||
|
return n-1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
long long n;
|
||||||
|
cin >> n;
|
||||||
|
cout << eulerTotient(n);
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user