LK的数学题
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
LK最近遇到一个问题,需要你帮她一下。一个整数n,求[1,n)中,和n互素的数的个数。
-
输入
-
多组测试数据,每一行有一个整数n(n<1000000001),0表示输入结束。
输出
- 小于n同时和n互素的整数的个数 样例输入
-
7 12 0
样例输出
-
6 4
来源
套上 欧拉函数就能过
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <math.h> #include <memory.h> using namespace std; int euler(int n){ int res=n; for(int i=2;i*i<=n;i++){ if(n%i==0){ res=res/i*(i-1); while(n%i==0) n/=i; } } if(n>1) res=res/n*(n-1); return res; } int main(){ int n; while (~scanf("%d",&n)&&n!=0) { printf("%d\n",euler(n)); } return 0; }
-
多组测试数据,每一行有一个整数n(n<1000000001),0表示输入结束。