UVa 294 - Divisors
来源:互联网 发布:linux 按文件名查找 编辑:程序博客网 时间:2024/05/18 20:11
题目:计算一个给定区间中因数最多的数。
分析:数论、组合数学。题目的数据的比较大,如果暴力一定会超时,那么就考虑利用其他方法求解。
我们将给定数字因式分解,那么因数的个数就是π(各质因子数+1)。(每个质因子取0~上限个)
因为数据时在10^9之内,所以质因数只能是33333以内的素数,利用筛法将素数打表计算即可。
#include <iostream>#include <cstdlib>using namespace std;int visit[34000];int prime[34000];//因式分解,计算因子个数 int number( int a, int n ){int sum = 1;for ( int i = 0 ; a > 1 && i < n ; ++ i ) if ( a%prime[i] == 0 ) {int count = 1;while ( a%prime[i] == 0 ) {count ++;a /= prime[i];}sum *= count;}return sum;}int main(){//利用筛法计算素数,打表 for ( int i = 0 ; i < 34000 ; ++ i )visit[i] = 1;int count = 0;for ( int i = 2 ; i < 34000 ; ++ i )if ( visit[i] ) {prime[count ++] = i;for ( int j = 2*i ; j < 34000 ; j += i )visit[j] = 0;}long a,b,c;while ( cin >> c )while ( c -- ) {cin >> a >> b;long save = a,max = 0,temp;for ( long i = a ; i <= b ; ++ i ) {temp = number( i, count );if ( temp > max ) {max = temp;save = i;}}cout << "Between " << a << " and " << b << ", " << save << " has a maximum of " << max << " divisors.\n";}return 0;}
- uva 294 divisors
- UVa 294-Divisors
- UVa 294 - Divisors
- UVa 294 - Divisors
- UVa 294 - Divisors
- UVa 294 - Divisors
- UVA 294(p344)----Divisors
- UVa 294 Divisors
- UVa 294 Divisors
- UVA 294 294 - Divisors (数论)
- uva 294 - Divisors(枚举+计数)
- UVa 294 - Divisors(数学)
- uva 294 ——Divisors
- Divisors UVA
- UVa 294 - Divisors(唯一分解)
- uva 294 Divisors 求因子个数
- UVA 294 Divisors(唯一分解定理 + 除数函数)
- 习题10-9 UVA 294 Divisors(约数)
- Struts2文件上传
- 链表
- HTTP错误总节400 403 401 404
- bind与call比较分析
- ExtJS图片上传预览
- UVa 294 - Divisors
- properties文件中的unicode编码与本地编码互相转换
- 02.运算符,程序流程控制…
- 03.函数,数组
- 如何获取到css文件里的相关属性
- 04.面向对象(一)【概念】【封装】
- 05.面向对象(二)【单例】【继承】【多态】【接口】【final】【内部类】
- Box2D C++ tutorials - Buoyancy
- 06.面向对象(三)【异常】【包】【多线程】