【題目描述】求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 ...