题目链接:https://vjudge.net/contest/333800#problem/E
题目大意:根据唯一分解定理,计算约数是偶数的个数。
思路:被数据范围演了,打表找规律即可。
我们发现:一个数是平方数的话约数和就是奇数(直接开方向下取整);一个数包含2的奇数次方的约数和也是奇数(除2之后直接开方向下取整),所以用减去即是答案。
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
int t;
cin>>t;
int Case=0;
while(t--){
ll n;
cin>>n;
ll ans=n-(ll)sqrt(n)-(ll)sqrt(0.5*n);
cout<<"Case "<<++Case<<": "<<ans<<"\n";
}
return 0;
}
惊呆了吧!