整数个数
金牌导航 欧拉函数-1
题目大意
问1~n-1中满足x∤\nmid∤n且不与n互质的数有多少个
输入样例
10
输出样例
3
样例解释
3个数分别是4,6,8
数据范围
0⩽n⩽2310\leqslant n\leqslant 2^{31}0⩽n⩽231
解题思路
因为互质和整除的子集是独立的(1除外),所以求出这两个子集大小,然后用n减去即可
代码
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
int n, m, p, ans, ans1;
int main()
{scanf("%d", &n);m = ans = n;ans1 = 1;//1也和n互质,不重复计算for (int i = 2; i * i <= n; ++i){p = 0;while(m % i == 0) m /= i, p++;if (p) ans = ans / i * (i - 1);//欧拉函数if (n % i == 0) ans1 += 2;//因子是成对的if (i * i == n) ans1--;//如果和自己成对,那么不重复计算}if (m > 1) ans = ans / m * (m - 1);printf("%d", n - ans - ans1);return 0;
}