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