• 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;
    }

     

  • 相关阅读:
    [IOI2014] 假期
    [SPOJ22343] Norma
    [APC001] D Forest
    [POI2004] SZN
    [JZOJ5837] Omeed
    [JZOJ5836] Sequence
    【题解】[CH弱省胡策R2]TATT
    【题解】简单题
    【题解】巧克力王国
    【题解】[SDOI2010]捉迷藏
  • 原文地址:https://www.cnblogs.com/elisa02/p/12813085.html
Copyright © 2020-2023  润新知