Uva 294 Divisors(唯一分解定理)
题意:求区间内正约数最大的数。
原理:唯一分解定义(又称算术基本定理),定义如下:
,都可以唯一分解成有限个质数的乘积
,这里
均为质数,其诸指数
是正整数。这样的分解称为
的标准分解式。(取自百度百科)
根据原理,正约数数量 = (1+a1)(1+a2)..(1+an)
因此我们需要先求出所有素数,进而求出a1,a2,..an的大小。
原题给的数字范围是1<=L<=U<=10^9,假如要全部算一遍需要很长时间。那么可能最大的正约数是多少呢?
回想我们所用的判断素数的算法(第五行到第十二行),最大可能的正约数不会超过根号n。求得n大约是31622。
然后我们就可以把1<=n<=31622内的素数打表来加速我们的计算。
完整代码如下:
#include <bits/stdc++.h>
using namespace std;
vector<int> prime;
//
int is_prime(int n)
{
int k = floor(sqrt(n)+0.5);
for(int i = ; i <= k; i++){
if(n%i==)return ;
}
return ;
}
int divinum(int n){
int sum = ;
unsigned k = ;
while(n>&&k<prime.size()){
int t = ;
while(n%prime[k]==){
n/=prime[k];
t++;
}
k++;
sum*=t;
}
return sum;
}
int main(){
int n;
for(int i = ; i <= ; i++){
if(is_prime(i))
prime.push_back(i);
}
cin >> n;
while(n--){
int L, U;
cin >> L >> U;
int max_factor = ;
max_factor = ;
int max_num = ;
for(int i = L; i <= U; i++){
int k = divinum(i);
if(k > max_factor){
max_factor = k;
max_num =i;
}
}
printf("Between %d and %d, %d has a maximum of %d divisors.\n",L,U,max_num,max_factor);
}
return ;
}
Uva 294 Divisors(唯一分解定理)的更多相关文章
- UVa 294 - Divisors 解题报告 c语言实现 素数筛法
1.题目大意: 输入两个整数L.H其中($1≤L≤H≤10^9,H−L≤10000$),统计[L,H]区间上正约数最多的那个数P(如有多个,取最小值)以及P的正约数的个数D. 2.原理: 对于任意的一 ...
- UVA - 294 Divisors【数论/区间内约数最多的数的约数个数】
Mathematicians love all sorts of odd properties of numbers. For instance, they consider to be an int ...
- UVA 294 - Divisors 因子个数
Mathematicians love all sorts of odd properties of numbers. For instance, they consider 945 to be an ...
- UVA - 294 Divisors (约数)(数论)
题意:输入两个整数L,U(1<=L<=U<=109,U-L<=10000),统计区间[L,U]的整数中哪一个的正约数最多.如果有多个,输出最小值. 分析: 1.求一个数的约数, ...
- 紫书 例题 10-4 UVa 10791(唯一分解定理)
首先分解,然后可以发现同一个因子ai不能存在于两个以上的数中 因为求的是最小公倍数,如果有的话就可以约掉 所以数字必然由ai的pi次方的乘积组成,那么显然,在 a最小为2,而b大于2的情况下a*b&g ...
- 紫书 例题 10-3 UVa 10375 (唯一分解定理)
这道题感觉非常的秀 因为结果会很大,所以就质因数分解分开来算 非常的巧妙! #include<cstdio> #include<vector> #include<cstr ...
- UVA 294 294 - Divisors (数论)
UVA 294 - Divisors 题目链接 题意:求一个区间内,因子最多的数字. 思路:因为区间保证最多1W个数字,因子能够遍历区间.然后利用事先筛出的素数求出质因子,之后因子个数为全部(质因子的 ...
- UVA - 10375 Choose and divide[唯一分解定理]
UVA - 10375 Choose and divide Choose and divide Time Limit: 1000MS Memory Limit: 65536K Total Subm ...
- UVA.10791 Minimum Sum LCM (唯一分解定理)
UVA.10791 Minimum Sum LCM (唯一分解定理) 题意分析 也是利用唯一分解定理,但是要注意,分解的时候要循环(sqrt(num+1))次,并要对最后的num结果进行判断. 代码总 ...
随机推荐
- Docker官方文档翻译2
转载请标明出处: https://blog.csdn.net/forezp/article/details/80158062 本文出自方志朋的博客 容器 准备工作 安装Docker,版本为1.13或者 ...
- 『ACM C++』HDU杭电OJ | 1425 - sort (排序函数的特殊应用)
今天真的是累哭了,周一课从早八点半一直上到晚九点半,整个人要虚脱的感觉,因为时间不太够鸭所以就回头看看找了一些比较有知识点的题来总结总结分析一下,明天有空了就开始继续打题,嘻嘻嘻. 今日兴趣电影: & ...
- 『ACM C++』Virtual Judge | 两道基础题 - The Architect Omar && Malek and Summer Semester
这几天一直在宿舍跑PY模型,学校的ACM寒假集训我也没去成,来学校的时候已经18号了,突然加进去也就上一天然后排位赛了,没学什么就去打怕是要被虐成渣,今天开学前一天,看到最后有一场大的排位赛,就上去试 ...
- tomcat端口占用后的解决办法【亲测有效】
https://www.cnblogs.com/zhangtan/p/5856573.html 检测正在使用的端口 这里就以win7为例进行讲解. 首先打开cmd,打开的方法很简单,在开始菜单中直 ...
- Percona-Tookit工具包之pt-table-checksum
Preface The master-slave replication is commonly used in our product evironment.On account o ...
- 子域收集-fierce
fierce 是使用多种技术来扫描目标主机IP地址和主机名的一个DNS服务器枚举工具.运用递归的方式来工作.它的工作原理是先通过查询本地DNS服务器来查找目标DNS服务器,然后使用目标DNS服务器来查 ...
- koa2 mongdb 做后端接口的小demo
现在前端全栈里面有一种技术栈比较火 前端使用 vue 或者react 后端使用 koa2 mysql数据库 或者mongdb做数据储存 但是基本这样的全栈教程 都要收费 收费就收费吧 但是 有没有遇到 ...
- thinkphp5数据库导入Excel表格
$data=$order_info; //$data 你要下载谁 就去查谁 // $data= Db::name('order_info') // ->field('consignee,tel, ...
- powerpoint教程资料,PPT的
Powerpoint,是微软公司设计的演示文稿软件,利用Powerpoint不仅可以创建演示文稿,还可以在互联网上召开面对面会议.远程会议或在网上给观众展示演示文稿,掌握利用PowerPoint是一项 ...
- C# 实现程序开机自启动
最近在做一个自动备份文件的小工具,需要用到开机自启动 下面是代码 private void checkBox8_CheckedChanged(object sender, EventArgs e) { ...