您的位置:首页 > 其它

csuoj1970LXX数

2017-07-29 13:16 176 查看

Description

又是一年集训时,刚出家里赶来的LXX很是郁闷。因为CS市的天气实在是难以忍受了,加之搬寝室到CS大学“老”校区。一天晚上CS大学“老”校区的寝室又停电了,LXX和室友实在是难以呆下去了。于是商量一起去网吧吹空调,但是谁请客是个问题。LXX的室友小Z便甩出一个问题给LXX,只要LXX在1S内计算出来便请客。问题如下:

我有n个数,a[1]~a
,初始值均为0,现在我要执行n次操作(操作1到操作n),操作i为:把所有的a[t]反转(t%i==0,反转即0->1,1->0)。如果最后的a[i]为1,则称i为LXX数。求最后又多少个LXX数。奈何LXX太弱了,为了能够免费去网吧吹空调,他决定寻求你的帮助。

Input

大量多组数据。每行一个正整数N(N<=1e18)

Output

每行输出一个正整数,即答案LXX的数量。

Sample Input

2
15


Sample Output

1
3


一开始想着模拟整个过程,但是一看N太大了存不了,后来一想就算是存了也肯定会超时

这个时候最好就是把样例给在草稿纸上模拟一遍了,然后会发现其实对于一个数来说,每一个因子都对应另外一个因子使得两个因子之积为这个数

而平方数则存在有两个因子相等的情况

所以问题就解决了,除平方数以外的数都有偶数个因子,所以LXX数都是平方数

代码

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
using namespace std;
int main()
{
long long N;
while(scanf("%lld",&N)==1)
{
long long ans=sqrt(N);
printf("%lld",ans);
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: