【51NOD】1717 好数

【算法】数学

【题意】a数组初始为0,t=1~n,每次01翻转t的倍数,最终为0的数字定义为好数,求好数个数

【题解】一个数字为好数的条件是翻转偶数次,也即一个数是好数当且仅当有偶数个因子时。

因子都是两两配对的,只有完全平方数才拥有奇数个因子。

对于n以内的数字,1~√n的平方就是所有完全平方数。

ans=n-√n

#include<cstdio>
#include<math.h>
int main(){
    long long n;
    scanf("%lld",&n);
    printf("%lld",n-(long long)sqrt(n));
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/onioncyc/p/7449657.html