uva 294 - Divisors(枚举+计数)

题目连接:uva 294 - Divisors

题目大意:给出一个范围L~U,问说在该范围中因子数最多的数是多少。

解题思路:枚举L~U中的数,将数分解成质因子,利用乘法原理求总因子数。

#include <cstdio>
#include <cstring>
#include <cmath>

int countFactor (int x) {
    int ans = 1;
    int m = sqrt(x+0.5);

    for (int i = 2; i <= m; i++) {
        int c = 0;
        while (x % i == 0) {
            x /= i;
            c++;
        }

        ans *= (c + 1);
    }
    if (x > 1)
        ans *= 2;
    return ans;
}

int main () {
    int cas, L, U;
    scanf("%d", &cas);

    while (cas--) {
        scanf("%d%d", &L, &U);
        int ans = 0, id;
        for (int i = L; i <= U; i++) {
            int tmp = countFactor(i);
            if (tmp > ans) {
                ans = tmp;
                id = i;
            }
        }
        printf("Between %d and %d, %d has a maximum of %d divisors.\n", L, U, id, ans);
    }
    return 0;
}

uva 294 - Divisors(枚举+计数),布布扣,bubuko.com

时间: 2024-10-07 03:39:43

uva 294 - Divisors(枚举+计数)的相关文章

UVA 294 Divisors( 因子分解)

294 DivisorsMathematicians love all sorts of odd properties of numbers. For instance, they consider 945 to be aninteresting number, since it is the rst odd number for which the sum of its divisors is larger than thenumber itself.To help them search f

UVA 294 - Divisors 因子个数

Mathematicians love all sorts of odd properties of numbers. For instance, they consider 945 to be an interesting number, since it is the first odd number for which the sum of its divisors is larger than the number itself. To help them search for inte

UVa 294 - Divisors

计算一个给定区间中因数最多的数. 分析:数论.组合数学.题目的数据的比较大,如果暴力一定会超时,那么就考虑利用其他方法求解. 我们将给定数字因式分解,那么因数的个数就是π(各质因子数+1).(每个质因子取0~上限个) 因为数据时在10^9之内,所以质因数只能是33333以内的素数,利用筛法将素数打表计算即可. #include <iostream> #include <cstdlib> using namespace std; int visit[34000]; int prime

UVA - 294 Divisors (约数)(数论)

题意:输入两个整数L,U(1<=L<=U<=109,U-L<=10000),统计区间[L,U]的整数中哪一个的正约数最多.如果有多个,输出最小值. 分析: 1.求一个数的约数,相当于分解质因子. 2.例如60 = 2 * 2 * 3 * 5.对于2来说,可选0个2,1个2,2个2,有3种情况,同理对于3,有2种情况,对于5,有2种情况,所以3 * 2 * 2则为60的约数个数. 3.L到U扫一遍,取最大值即可. #pragma comment(linker, "/STAC

UVA 294 294 - Divisors (数论)

UVA 294 - Divisors 题目链接 题意:求一个区间内,因子最多的数字. 思路:因为区间保证最多1W个数字,因子能够遍历区间.然后利用事先筛出的素数求出质因子,之后因子个数为全部(质因子的个数+1)的积 代码: #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; const int N = 35005; int prime[N], pn = 0, v

UVA 10574 - Counting Rectangles(枚举+计数)

10574 - Counting Rectangles 题目链接 题意:给定一些点,求能够成几个矩形 思路:先把点按x排序,再按y排序,然后用O(n^2)的方法找出每条垂直x轴的边,保存这些边两点的y坐标y1, y2.之后把这些边按y1排序,再按y2排序,用O(n)的方法找出有几个连续的y1, y2都相等,那么这些边两两是能构成矩形的,为C2cnt种,然后累加起来就是答案 代码: #include <stdio.h> #include <string.h> #include <

uva 1510 - Neon Sign(计数)

题目链接:uva 1510 - Neon Sign 题目大意:给定n个点,任意三点不共线,并且两两点之间有一条线,给定线的颜色.问说有多少个三角形三边同色. 解题思路:对于每个点,记录该点黑色边的数量和红色边的数量,考虑以该点为顶点的三角形,从红色边中选一条,黑色边中选一条,组成的三角形一定是不满足的.因为一个不同色三角形会有两个点满则,所以考虑了两次.用总的个数减掉不同色的即可. #include <cstdio> #include <cstring> #include <

uva 1436 - Counting heaps(计数)

题目链接:uva 1436 - Counting heaps 题目大意:给出一个树的形状,现在为这棵树标号,保证根节点的标号值比子节点的标号值大,问有多少种标号树. 解题思路:和村名排队的思路是一只的uva11174,最后问题只和树德结构有直接关系,f(root)=(s(root)?1)!(s(1)?s(2)???s(n) 但是给定的取模数不是质数,所以不能用逆元做,只能将分子分母分别拆分成质因子,然后对质因子进制约分.因为最后的答案一定是正整数,所以对于每个质因子,分子分解出的因子个数一定大于

UVA 1393 - Highways (容斥原理计数)

题目链接:1393 - Highways 题意:给定一个n * m的点阵,问两两相连后,能组成多少条至少穿过两个点的直线,并且不是水平或垂直的 思路:找过两点的线段,由于是整数坐标,只要他的斜率不是整数,即x / y不是整数就能满足答案,然后先记录下这所有的位置,然后利用容斥原理求出对应每个点可以连出多少条这样的线段,最后去求和,求和的时候要注意,由于有一些是重复计算了,比如1 1 和 2 2 连,2 2 和 3 3 连,这样其实是算一条的,所以最后在求和的时候要扣掉重复的部分,直接减去sum[