數論題目小記

2022-05-10 07:14:35 字數 1614 閱讀 8461

【題目描述】求n到n+m內的素數個數

【解題報告】

「數論題目有時複雜度看著很大,實際上並沒有那麼大」

詳見**

#include #define ll long long

using namespace std;

const int n = 1e6 + 3;

ll n, m, pr[n], tot, s[n];

bool vis[n];

int main()

printf("%lld\n", tot);

}return 0;

}

【傳送門】

【題目大意】給定正整數\(c\),問從原點能看到幾個座標範圍\(0的整點。

【解題報告】

會被遮擋的是斜率相同的,也即\(\frac\)相同的座標;而k作為分數可以約分,於是我們可以得到解決這道問題的思路:

求出\(c * c\) 矩陣中除\((0,1),(1,0)\)以外所有互質點對

互質點對是對稱存在的,尤拉函式求出的是互質的數,所以尤拉出來的結果要x2;對角線不需要x2因為它沒有對稱點對(它在對稱軸上)

(刨除\((0,1),(1,0)\)是題目要求,而下一道雙倍經驗題要求的範圍不一樣,要重新仔細思考範圍嗷~)

到此,做法就呼之欲出了:尤拉函式求和。

#include const int n = 1e6 + 5;

#define int long long

using namespace std;

int t, c, n = 1e6, prime[n], phi[n], tot,ans;

bool vis[n];

void getprime()

for (int j = 0; j < tot && i * prime[j] <= n; ++j) else }}

}signed main()

return 0;

}

(雙倍經驗) sdoi 儀仗隊

要注意的是,題目中體委站的位置是\((1,1)\),不是原點;當 \(n = 1\)時,需要特判\(ans = 0\)。

(從實際意義上來說,\(n=1\)即矩陣只有體委乙個人,他當然不可能看到其他人;)

#include const int n = 1e6 + 5;

#define int long long

using namespace std;

int t, c, n = 1e6, prime[n], phi[n], tot,ans;

bool vis[n];

void getprime()

for (int j = 0; j < tot && i * prime[j] <= n; ++j) else }}

}signed main()

for (int i = 1; i <= c - 1 ; i++) ans += phi[i];

ans = ans * 2 + 1;

std::cout << ans;

return 0;

}

一道數論題目

有100盞燈,編號1 100,初始時都是亮著燈。有一百個小孩,編號1 100。每盞燈對應乙個開關,按下時燈亮,再按則燈滅。讓這一百個小孩依次按開關,每個小孩只能按其編號倍數的開關。比如1號小孩可以按所有開關,2號小孩只能按編號為偶數的開關,以此類推。請問所有的小孩都按過開關以後 注意 每個小孩都必須...

數論題目整理(持續補充)

題目鏈結 對於2,不止有因子2還有其他素數因子,能達到的最大數為3 2 k3 2 k 3 2k 只有乘以3,k才有可能最大 對於x 2的數,不止有因子x,能達到的最大數為2 x k2 x k 2 xk 題目要求我們求出小於n的,不能被表示成素數的整數次冪的數,的最小公倍數 由算數基本定理,lcm p...

幾道數論題

第二類 stirling數 n個有類別的球放到 m個相同的盒子中,要求不能有空盒,有多少種放法?這道題就是第二類 stirling 數的經典例子,表示為 s n,m 它有遞推關係 s n,m m s n 1,m s n 1,m 1 其中n,m 1 當盒子數大於球數的時候即 m n 有s n,m 0 ...