From 56cfe3f041a3dc65ccbe18ef0783ad73b19a207c Mon Sep 17 00:00:00 2001 From: aniakubik Date: Tue, 29 Oct 2019 22:26:55 +0100 Subject: [PATCH] added euler totient function --- Math/eulerTotient.cpp | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Math/eulerTotient.cpp diff --git a/Math/eulerTotient.cpp b/Math/eulerTotient.cpp new file mode 100644 index 000000000..c71219641 --- /dev/null +++ b/Math/eulerTotient.cpp @@ -0,0 +1,37 @@ +#include +#include +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); + +} \ No newline at end of file