一个数的正约数个数等于这个数的质因数分解后 每一项幂+1的积 因为每个质因数的幂可以为0, 1, 2--(注意可以为0) 所以就每个质因数配一个幂任意组合就可得一个正因数,根据乘法原理可得正约数个数. 另外质因数分解可以不用素数筛(但可能会稍微慢一点) #include<cstdio> #define REP(i, a, b) for(int i = (a); i < (b); i++) using namespace std; int f(int n) { int ret = 1; f…
素数筛然后前缀和 看代码 #include<cstdio> #include<vector> #include<cstring> #include<map> #define REP(i, a, b) for(int i = (a); i < (b); i++) using namespace std; const int MAXN = 11234; bool is_prime[MAXN]; vector<int> prime; int a[…
类似于素数筛的思想去做,不然暴力会超时而且还要判重 #include<cstdio> #include<cstring> #include<vector> #define REP(i, a, b) for(int i = (a); i < (b); i++) using namespace std; const int MAXN = 1123456; int vis[MAXN]; vector<int> prime; int f[MAXN]; void…
注意要开long long 如果int * int会炸 那么久改成long long * int #include<cstdio> #include<vector> #include<cstring> #define REP(i, a, b) for(int i = (a); i < (b); i++) using namespace std; typedef long long ll; const int MAXN = 1123456; bool is_prim…