MasssA


私信TA

用户名:1294309339

访问量:36604

签 名:

城市学院的渣渣

等  级
排  名 109
经  验 8139
参赛次数 6
文章发表 73
年  龄 0
在职情况 学生
学  校 城市学院的渣渣
专  业

  自我简介:

城市学院的渣渣

解题思路:开始没看取值大小用数组存储 后来发现数据太多存不下 分析了一下题目 当某数为完全平方数时它一定不亮(1除外)因为完全平方数的约数数量为奇数但是1又不能改变开关 所以因数数量恒为偶数,所以问题就转换为在区间内有多少个非完全平方数,对于一个数,从1到n有的完全平方数有sqrt(n)个,则在区间L-R中共有sqrt(R)-sqrt(L)个完全平方数,非完全平方数:R-L+1-(sqrt(R)-sqrt(L))


注意事项:  sqrt开根公式前一定要强制转化

参考代码:

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int main()
{
    long long int N, L, R, sum = 0;
    cin>>N>>L>>R;
    sum = R - L + 1 -(long long int)sqrt(R)+ (long long int)sqrt(L);
    cout<<sum;
}

 

0.0分

3 人评分

  评论区

你好,我想问一下。如果L,R分别是9和16。那么L和R之间的完全平方数的个数应该是两个啊(9、16)。那么计算出的结果应该是16-9+1-(2)=6。可是为什么你的代码跑出来的结果是7?我的代码改了一下跑出来的结果是6,提交是正确的。我认为我的想法应该是正确的。可以讨论一下吗?
2020-03-05 17:20:20
  • «
  • 1
  • »