牛客 124D--有趣的数字
链接:
https://www.nowcoder.com/acm/contest/124/D
来源:牛客网
题目描述
最近TreeDream沉迷于数字游戏中,发现了一种有趣的数字,有趣的数字定义如下:
给定一组n个数,a[1],a[2],a[3],...,a[n], 初始全为0,现在,在这组数上进行x操作;
x 操作定义如下:
x从1~n依次增加,每次把x的下标的倍数的数进行反转,0变成1,1变成0,操作完后,如果a[i]为0,那么i则是有趣的数。
现在对于给定的n(n<=1e15),求这时候有趣的数的个数。
例如:
n = 3
x = 1 时 :a[1] = 1, a[2] = 1, a[3] = 1;
x = 2 时 :a[1] = 1, a[2] = 0, a[3] = 1;
x = 3 时 :a[1] = 1, a[2] = 0, a[3] = 0;此时,3个数中,有两个数为0,故有趣的数的个数为2;
输入描述:
多组样例,每个样例占一行,每一行输入一个数n,表示有n个数。(n<=1e15)
输出描述:
每个样例输出一行,一行输出一个数,表示有趣的数的个数。示例1
输入
3
输出
2
思路:这个跟以前做过的一个灯的题一样,忘记以前是怎么做的了,但是这次发现了新的方法,就是一个sqrt、可以说是很6 了!!!
代码:
#include
using namespace std;
#define inf 0x3f3f3f3f
#define mod 1000000007
long long T,n,num,p,k,a[100005],x,ans;
int main()
{while(~scanf("%lld",&n)){cout<
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
