2014年第五屆藍橋杯C/C++程序設計本科B組決賽 生物芯片(編程大題)

生物芯片

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
再例如:
輸入:
10 3 6
程序應該輸出:
3
資源約定:
峯值內存消耗 < 256M
CPU消耗 < 1000ms
請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入…” 的多餘內容。
所有代碼放在同一個源文件中,調試通過後,拷貝提交該源碼。
注意: main函數需要返回0
注意: 只使用ANSI C/ANSI C++ 標準,不要調用依賴於編譯環境或操作系統的特殊函數。
注意: 所有依賴的函數必須明確地在源文件中 , 不能通過工程設置而省略常用頭文件。
提交時,注意選擇所期望的編譯器類型。

思路:完全平方數的因子個數爲奇數。

一個光源最後是打開的,當且僅當他被操作了奇數次,也即是說該數的因子數爲奇數,即該數爲完全平方數,但是這題是不算1的,故最終答案是,若該數不是完全平方數,則最後爲打開狀態。

/*http://blog.csdn.net/u014552756/article/details/51394305#*/
#include <iostream>  
#include <cmath>  
using namespace std;  
int main()  
{  
    long long int n,l,r;  
    cin>>n>>l>>r;  
    long long int ll=(int)(sqrt(l-1))+1;  
    long long int rr=(int)(sqrt(r));  
    if(rr>=ll)  
        cout<<r-l+1-(rr-ll+1);  
    else  
        cout<<r-l+1;  
    return 0;  
}  

這個可能會好理解一些

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    long long int n,r,l,sum=0,t;
    cin>>n>>l>>r;
    for(int i=l;i<=r;i++)//從l to r遍歷**重點內容**
    {
        t=sqrt(i);
        if (t*t==i)//如果是完全平方數,繼續
        {
            continue;
        }
        else
        {
            sum++;//不是,sum加加
        }
    }
    cout<<sum;

    return 0;
}

完全平方數的性質!
1. 個位數是2,3,7,8的整數一定不是完全平方數;
2. 個位數和十位數都是奇數的整數一定不是完全平方數;
3. 個位數是6,十位數是偶數的整數一定不是完全平方數;
4. 形如3n+2型的整數一定不是完全平方數;
5. 形如4n+2和4n+3型的整數一定不是完全平方數;
6. 形如5n±2型的整數一定不是完全平方數;
7. 形如8n+2,8n+3,8n+5,8n+6,8n+7型的整數一定不是完全平方數;
8. 數字和是2,3,5,6,8的整數一定不是完全平方數。
9. 四平方和定理:每個正整數均可表示爲4個整數的平方和
10. 完全平方數的因數個數一定是奇數。

當一個整數的因子數量爲奇數,這個數一定是完全平方
一個整數分解因數,表達爲A=XY,X、Y是兩個不同的整數,即因子總是成對出現.如6=1x6=2x3.如果Y=X,則A=XY=Xx,A當然是完全平方數.x、x是兩個因子,但按集合觀點來看,根據元素互異性,只算一個,這次分解因子相重:個數就爲奇數了.如36=1x36=2x18=3x12=4x9=6x6,前四次分解因子都成對爲偶數,最後兩6只算一種因子,就成奇數了.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章