51nod 2489 小b和灯泡

Posted elisa02

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod 2489 小b和灯泡相关的知识,希望对你有一定的参考价值。

题目链接:http://class.51nod.com/Challenge/Problem.html#problemId=2489

一、题目描述

小b有n个关闭的灯泡,编号为1...n。

小b会进行n轮操作,第i轮她会将编号为i的倍数的灯泡的开关状态取反,即开变成关,关变成开。

求n轮操作后,有多少灯泡是亮着的。

输入:

输入一个数字表示灯泡数n,其中1<n≤10000000

输出:

输出一个数字表示最终亮着的灯泡数

样例输入:

3

样例输出:

1

二、思路描述

用暴力的方法肯定会超时的,所以肯定不可以

对于第1个灯泡,第1次操作会反转开关。最终状态是开

对于第2个灯泡,第1、2次操作会反转开关。最终状态是关

对于第3个灯泡,第1、3次操作会反转开关。最终状态是关

对于第4个灯泡,第1、2、4?次操作会反转开关。最终状态是开

对于第i个灯泡,第i的因子次操作都会使开关反转。

以因子个数为偶数的最终状态是关,因子个数为奇数的最终状态是开。只有完全平方数的因子数是奇数。

因为如果A是C的因数,则C/A也是C的因数。因此因数总是成对出现的,只有当C/A=A时,C的因数个数才可能是奇数。

所以只需要统计出1-n中有多少个完全平方数即可

 

三、代码

#include<cstdio>
#include<iostream>
using namespace std;
int main(){
    int n, ans=0;
    cin >> n;
    for(int i = 1;i*i <= n;i++){
        ans++;
    }
    cout << ans << endl;
    return 0;
}

 

 

以上是关于51nod 2489 小b和灯泡的主要内容,如果未能解决你的问题,请参考以下文章

51nod 1631 小鲨鱼在51nod小学

51nod——2476 小b和序列 预处理

51 Nod 1349 最大值

51nod 2478单调栈前缀和小b接水

51nod 2485 小b重排字符串

51Nod 1119 机器人走方格 V2 组合数学 费马小定理