luogu6860 象棋與馬

2022-06-07 10:09:09 字數 1149 閱讀 8179

根據擴歐$(a,b)=1$必須要滿足,同時,若$a+b$為偶數則格仔的」奇偶性「不變,因此$a+b$必須為奇數

反過來,容易證明滿足$(a,b)=1$且$a+b$為奇數則一定可行(構造從$(0,0)$到$(0,1)$的一組解即可)

不妨假設$a$為奇數、$b$為偶數(答案再乘以2),分兩類考慮:

1.$a2.$a>b$,由於$(a,b)=1$等價於$(a,a-b)=1$,因此每乙個小於$a$且與$a$互素的奇數與另乙個偶數對應,因此即$\sum_\frac$

不妨先把答案的2乘進去,那麼即$f_=\sum_^\varphi(i)+\sum_\varphi(2i)$(偶數要算兩次)

根據積性或$\varphi$的計算過程,若$i$為奇數,則有$\varphi(2i)=\varphi(i)$,若$i$為偶數,則$\varphi(2i)=2\varphi(i)$

對於$\sum_\varphi(2i)$,對$i$的奇偶性分類討論,即$\sum_\varphi(2i)=\sum_\varphi(2i)+\sum_\varphi(2i+1)=f_}$

根據$f_=\sum_^\varphi(i)+f_}$,再用杜教篩優化,時間複雜度可以做到$o(tn^}\log_n)$,可以通過

1 #include2

using

namespace

std;

3#define n 40000005

4#define ull unsigned long long

5int

t,vis[n],p[n];

6ull n,ans,phi[n];

7 mapmat;

8ull calc(ull n)

18return mat[n]=ans;19}

20int

main()

27for(int j=1;(j<=p[0])&&(i*p[j]4);j++) 34}

35}36for(int i=2;i4;i++)phi[i]=phi[i]+phi[i-1

];37 scanf("

%d",&t);

38while (t--)

45 printf("

%llu\n

",ans);46}

47 }

view code

luogu2051中國象棋

題目描述 這次小可可想解決的難題和中國象棋有關,在乙個n行m列的棋盤上,讓你放若干個炮 可以是0個 使得沒有乙個炮可以攻擊到另乙個炮,請問有多少種放置方法。大家肯定很清楚,在中國象棋中炮的行走方式是 乙個炮攻擊到另乙個炮,當且僅當它們在同一行或同一列中,且它們之間恰好 有乙個棋子。你也來和小可可一起...

Luogu 動態等級與使用者名稱顏色

動態等級是根據使用者在一段時間內的刷題 社群活躍 打卡 題解 違規情況,按照一定演算法得出的結果,該演算法不公開。動態等級比較準確的表現了使用者一段時間內在洛谷的綜合行為。動態等級由 1 到 4,使用者名稱的顏色為分別對應為棕色 灰色 藍色 綠色 橙色 紅色。管理員的使用者名稱顏色為紫色,不受動態等...

樹狀陣列求逆序對與luogu1908

今天上午,我完成了樹狀陣列求逆序對 1 的學習,並完成了luogu1908的程式設計與除錯,以下是一些記錄與感想 樹狀陣列求逆序對的中心思想是 1 樹狀陣列c a i 記錄a i 出現的次數,然後利用樹狀陣列求小於a i 的數的個數s i 2 2 用i s i 表示輸入到當前時,大於a i 的數的個...