题意:
给出n,算出小于等于n的所有数中,有几对互质;
思路:
欧拉函数:欧拉函数的原理是,把n所有的因子的倍数全部去掉;
例如12的因子有2,3,4,6;就把12以下2,3,4,6的倍数全部减掉,剩下的就是和12互质的数.
欧拉函数是算小于n的数中,有几个数和n互质.
然后把1到n的所有欧拉函数的值累加起来就行了.
#include<cstdio>
#include<cstring>
#include<cmath>
const int N = 50005;
int prime[N];
int n;
void solve() {
prime[1] = 1;
for(int i = 2 ; i <= N ;i++) {
if(!prime[i]) {
for(int j = i ; j <= N ; j += i) {
if(!prime[j])
prime[j] = j;
prime[j] = prime[j] / i * (i - 1);
}
}
}
for(int i = 2 ; i <= N ;i++) {
prime[i] += prime[i - 1];
}
}
int main () {
solve();
while(scanf("%d",&n) && n) {
printf("%d\n",prime[n] * 2 - 1);
}
}