本文主要是介绍问题 1818: [蓝桥杯][2014年第五届真题]生物芯片,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题 1818: [蓝桥杯][2014年第五届真题]生物芯片
时间限制: 1Sec 内存限制: 128MB 提交: 374 解决: 86
题目描述
X博士正在研究一种生物芯片,其逻辑密集度、容量都远远高于普通的半导体芯片。
博士在芯片中设计了 n 个微型光源,每个光源操作一次就会改变其状态,即:点亮转为关闭,或关闭转为点亮。
这些光源的编号从 1 到 n,开始的时候所有光源都是关闭的。
博士计划在芯片上执行如下动作:
所有编号为2的倍数的光源操作一次,也就是把 2 4 6 8 ... 等序号光源打开
所有编号为3的倍数的光源操作一次, 也就是对 3 6 9 ... 等序号光源操作,注意此时6号光源又关闭了。
所有编号为4的倍数的光源操作一次。
.....
直到编号为 n 的倍数的光源操作一次。
X博士想知道:经过这些操作后,某个区间中的哪些光源是点亮的。
输入
3个用空格分开的整数:N L R (L<R<N<10^15) N表示光源数,L表示区间的左边界,R表示区间的右边界。
输出
输出1个整数,表示经过所有操作后,[L,R] 区间中有多少个光源是点亮的。
样例输入
5 2 3
样例输出
2
思路:
当某数为完全平方数时它一定不亮(1除外)因为完全平方数的约数数量为奇数但是1又不能改变开关 所以因数数量恒为偶数,所以问题就转换为在区间内有多少个非完全平方数,对于一个数,从1到n有的完全平方数有sqrt(n)个,则在区间L-R中共有sqrt(R)-sqrt(L)个完全平方数,非完全平方数:R-L+1-(sqrt(R)-sqrt(L))
#include <iostream>
#include <cmath>
using namespace std;
typedef long long ll;
int main(){ll N,L,R;cin >> N >> L >> R;ll a = (ll)( sqrt(L) );ll b = (ll)( sqrt(R) );cout <<( R-L+1-b+a ) << endl;return 0;
}
这篇关于问题 1818: [蓝桥杯][2014年第五届真题]生物芯片的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!