for(int i = 1; i <= n; ++i) for(int j = 1; i * j <= n; ++j) d[i * j]++;
#include <cstdio> #include <cstring> #define N 100001 int n,p; bool mark[N]; int prime[N]; void get_prime(){ for(int i = 2; i <= N;++i){ if(!mark[i]) prime[++p] = i; for(int j = 1; j <= p; ++j){ if(i * prime[j] > N) break; mark[i * prime[j]] = true; if(i % prime[j] == 0) break; } } } int get(int n1){ int w1[N]; memset(w1, 0, sizeof(w1)); for(int i = 1; prime[i] <= n1; ++i){ while(n1 % prime[i] == 0){ w1[i]++; n1 = n1 / prime[i]; } } int ans = 1; for(int i = 1; i <= p; ++i) ans = ans * (w1[i] + 1); return ans; } int main(){ get_prime(); printf("%d", get(36)); //for(int i = 1; i <= p; ++i) printf("%d ", prime[i]); return 0; }
原文:https://www.cnblogs.com/Adventurer-H/p/10872149.html