您的位置:首页 > 其它

UVa 294 - Divisors(数学)

2015-03-13 17:55 489 查看
统计每一个数的约数, 然后求出最大的。

对于每个数n, 只需要求到sqrt(n), 就可以了, 因为如果这个数能被sqrt(n)以下的数m整除, 那么它肯定能被 n / m 整除, 所以加2。

这里要注意n是平方数, 最后要减一。

#include <iostream>
#include <cstdio>
#include <cmath>

using namespace std;

int main() {
int N;
scanf("%d", &N);
while(N--) {
int L, U;
int best = 0, best_n = 0;
scanf("%d%d", &L ,&U);
for(int i = L; i <= U; i++) {
int n = 0, k = i;
for(int j = 1; j * j <= i; j++) {
if(!(k % j)) n += 2;
if(j * j == i) n -= 1;
}
if(n > best_n) {
best = i;
best_n = n;
}
}
printf("Between %d and %d, %d has a maximum of %d divisors.\n", L, U, best, best_n);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: