zoukankan      html  css  js  c++  java
  • 【Luogu1876】开灯(数论)

    【Luogu1876】开灯(数论)

    题面

    题目描述

    首先所有的灯都是关的(注意是关!),编号为1的人走过来,把是一的倍数的灯全部打开,编号为二的的把是二的倍数的灯全部关上,编号为3的人又把是三的倍数的灯开的关上,关的开起来……直到第N个人为止。

    给定N,求N轮之后,还有哪几盏是开着的。

    输入输出格式

    输入格式:

    一个数N,表示灯的个数和操作的轮数

    输出格式:

    若干数,表示开着的电灯编号

    说明

    1<=N<=2^40

    题解

    凭什么这道题目是入门难度!!!!
    就因为代码简单????
    想一想,一开始所有的灯都是关着的,
    如果被操控若干次后,灯开着
    则意味着灯被操控了奇数次
    而一个灯被操控的次数是他的约数的个数
    一个数(n=p_1^{a_1}*p_2^{a_2}...p_k^{a_k})
    的约数个数是((a_1+1)(a_2+1)...(a_k+1))
    而且这个数是奇数
    意味这所有的(a_i)都是偶数
    也就是说,(n=m^2)
    其中(m=p_1^{a_1/2}*p_2^{a_2/2}...p_k^{a_k/2})
    所以,所有的最终的满足条件的(n)都是完全平方数

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<set>
    #include<map>
    #include<vector>
    #include<queue>
    using namespace std;
    long long n;
    int main()
    {
    	cin>>n;
    	for(int i=1;i<=sqrt(n);++i)
    		printf("%lld ",1ll*i*i);
    	puts("");
    	return 0;
    }
    
    
  • 相关阅读:
    2017已过半,这半年,你累吗?
    2017已过半,这半年,你累吗?
    2017已过半,这半年,你累吗?
    程序员的一个好习惯,你有几个?
    程序员的一个好习惯,你有几个?
    程序员的一个好习惯,你有几个?
    深拷贝与浅拷贝
    understanding android build layer · Dylan
    Markdown语法
    npm参考手册
  • 原文地址:https://www.cnblogs.com/cjyyb/p/7799081.html
Copyright © 2011-2022 走看看