http://acm.nyist.net/JudgeOnline/problem.php?pid=291
LK的数学题
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
LK最近遇到一个问题,需要你帮她一下。一个整数n,求[1,n)中,和n互素的数的个数。
-
输入
-
多组测试数据,每一行有一个整数n(n<1000000001),0表示输入结束。
输出
- 小于n同时和n互素的整数的个数 样例输入
-
7 12 0
样例输出
-
6 4
-
多组测试数据,每一行有一个整数n(n<1000000001),0表示输入结束。
#include<iostream>
using namespace std;
int eular(int n) {
int ret = 1, i;
for (i = 2; i * i <= n; i++)
if (n % i == 0) {
n /= i;
ret *= i - 1;
while (n % i == 0)
n /= i, ret *= i;
}
if (n > 1)
ret *= n - 1;
return ret;
}
int main() {
int n;
while (cin >> n && n != 0) {
cout << eular(n) << endl;
}
}
欧拉函数。具体怎么的证明过程也看不懂。