【每周例题】蓝桥杯 C++ 生物芯片

^^ / 2024-09-25 / 原文

生物芯片

题目

生物芯片

题目分析

·1.下面是亮灯规律,剩下的以此类推:我们可以看到,不亮灯的都是n的平方

 2.所以亮灯的数目=该区间内所有灯的数量-不亮灯的数目(简而言之,所有不亮灯的号码开方后都是整数)

代码

#include <iostream>  
#include <cmath>  
using namespace std;

int main()
{
    long long int n, l, r;
    cin >> n >> l >> r;
    long long int count = r - l + 1;//区域内所有灯的数目
    long long int ll = sqrt(l), rr = sqrt(r);//求出区间两端的开方后的数
    if (ll * ll != l || ll == 1)//如果L不是完全平方数或者L是1
    {
        count -= rr - ll;
    }
    else// 如果l是完全平方数,那么不应该包括l本身,所以从l的下一个完全平方数开始计数
    {
        count -= rr - ll - 1;
    }
    // 输出在区间[l, r]内,不是完全平方数但能被完全平方数(除了1)整除的数的数量  
    cout << count;
    return 0;
}