// UVa 10179 - Irreducable Basic Fractions
// Euler's totient function
#include <iostream>
#include <math.h>
#include <string.h>
#include <vector>
using namespace std;
#define mx 31622
#define integer unsigned long long int
int main() {
// prime sieve
bool isprime[mx + 1];
memset(isprime, true, sizeof(isprime));
for (integer i = 4; i <= mx; i += 2)
isprime[i] = false;
vector<integer> prime;
prime.push_back(2);
for (integer i = 3; i <= mx; i += 2)
if (isprime[i]) {
prime.push_back(i);
for (integer j = i * i; j <= mx; j += (i << 1))
isprime[j] = false;
}
//
integer n;
while ((cin >> n) && n) {
// euler's totient function
double prod = n;
for (int i = 0; i < prime.size() && prime[i] <= n; i++) {
if (n % prime[i] == 0) {
do
n /= prime[i];
while (n % prime[i] == 0);
prod *= (1.0 - 1.0 / prime[i]);
}
}
if (n > 1)
prod *= (1.0 - 1.0 / n);
// output
cout << ((integer) (prod)) << endl;
}
return 0;
}
Wednesday, June 17, 2015
UVa 10179 - Irreducable Basic Fractions
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment