【算法】数学
【题意】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; }