Divisors(唯一分解)
阿新 • • 發佈:2019-02-14
給出一個區間,問其中哪個數因子最多。對每個數進行唯一分解,然後求出素因子乘積即為因子個數。
#include <cstdio>
using namespace std;
const int maxn = 34000;
int prime[maxn],p;
bool np[maxn]={true,true};
void pre() {
for(int i = 2; i < maxn; ++i) {
if(!np[i]) prime[p++] = i;
for(int j = 0; j < p && i * prime[j] < maxn; ++j) {
np[i * prime[j]] = true ;
if(!(i % prime[j])) break;
}
}
return;
}
int solve(int n) {
int cur = 1;
for(int i = 0; i < p; ++i) {
int cnt=1;
if(n % prime[i] == 0) {
while(n % prime[i] == 0 && n)
n /= prime[i], ++cnt;
cur *= cnt;
}
}
return cur;
}
int main() {
pre();
int t; scanf("%d", &t);
while(t--) {
int l, r; scanf("%d%d", &l, &r);
int max_n = 0, ans = l;
for(int i = l; i <= r; ++i) {
int k=solve(i);
if(k > max_n) max_n = k,ans =i;
}
printf ("Between %d and %d, %d has a maximum of %d divisors.\n", l, r, ans, max_n);
}
return 0;
}