csuoj 1970 LXX數

Description

又是一年集訓時,剛出家裏趕來的LXX很是鬱悶。因爲CS市的天氣實在是難以忍受了,加之搬寢室到CS大學“老”校區。一天晚上CS大學“老”校區的寢室又停電了,LXX和室友實在是難以呆下去了。於是商量一起去網吧吹空調,但是誰請客是個問題。LXX的室友小Z便甩出一個問題給LXX,只要LXX在1S內計算出來便請客。問題如下:
我有n個數,a[1]~a[n],初始值均爲0,現在我要執行n次操作(操作1到操作n),操作i爲:把所有的a[t]反轉(t%i==0,反轉即0->1,1->0)。如果最後的a[i]爲1,則稱i爲LXX數。求最後又多少個LXX數。奈何LXX太弱了,爲了能夠免費去網吧吹空調,他決定尋求你的幫助。

Input

大量多組數據。每行一個正整數N(N<=1e18)

Output

每行輸出一個正整數,即答案LXX的數量。

Sample Input

2
15

Sample Output

1
3

Hint

題目大意:

n次操作,每次把下標爲i的倍數的a[t]反轉,問最終a數組中有多少個位置爲1。

解題思路:

考慮哪些位置的a[i]最終爲1,最終爲1說明此位置被反轉了奇數次,即i有奇數個因子,而有且僅有完全平方數有奇數個因子,所以答案爲sqrt(n)。

注意點:

本題數據較多,使用cin,cout會超時,建議改用scanf,printf。

代碼:
#include<cstdio>
#include<cmath>
using namespace std;

int main()
{
    long long n;
    while(scanf("%lld",&n)!=EOF)
    {
        long long help = (int)sqrt(n);
            printf("%ld\n",help);
    }
}

/**********************************************************************
	Problem: 1970
	User: liyingshou
	Language: C++
	Result: AC
	Time:64 ms
	Memory:1128 kb
**********************************************************************/


發佈了79 篇原創文章 · 獲贊 1 · 訪問量 8916
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章