欧拉函数(C++)
欧拉函数:简单来说,给定正整数n,f(n)定义为小于n的所有与n互素的数的个数,f(n)称为欧拉函数。
#include <cstdio>
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
int n;
int count = 0;
cin >> n;
for (int i = 1; i < n; i++) {
int flag = 1;
for (int j = 2; j <= i; j++) {
if (n % j == 0 && i % j == 0) {
flag = 0;
}
}
if (flag) {
count++;
}
}
cout << count;
return 0;
}
##易于理解,运行时间长,oj有时间限制似乎无法通过。
#include <cstdio>
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
int n;
cin >> n;
int a = n;
for (int i = 2; i * i <= a; i++) {
if (a % i == 0) {
n = n / i * (i - 1);
while (a % i == 0) a = a / i;
}
}
if (a > 1) n = n / a * (a - 1);
cout << n;
return 0;
}
##由定义及其性质出发的快速算法,参考自大佬。