题目链接:https://cn.vjudge.net/problem/LightOJ-1341

题意

给出一个长方形的面积a

让你算整数边长的可能取值,并且两个边都大于给定数字b

思路

唯一分解定理:$ n=\prod p_i^{a_i} \(
首先考虑分解质因数的复杂度\) O(\sum a_i) $,不会算-_-

然后尝试用试除法做这个

简单算了下复杂度,大概一共4×10^9个循环

最后也就试一试,不出意料超时

然后试图用筛法降低复杂度,等到交了才发现常数降了、复杂度是没降-_-

最后的最后还是用了分解质因数,这里必须注意一个优化,能大幅降低时空复杂度

考虑到一个小于1012的数,最多有一个超过106的质因数(若存在两个,必然超过10^12限制)

所以分解质因数的时候,质数可以仅生成到10^6

那么分解结束时若n!=1,可以判断n必然是大质数(超过10^6)

代码

#include <cstdio>
#include <cstring>
const int maxn=1e6+200;
int primes[maxn+5], psize;
bool isprime[maxn+5]; void initPrime(void){
memset(isprime, true, sizeof(isprime));
for (int i=2; i<maxn; i++) if (isprime[i]){
for (int j=i; j<=maxn; j+=i)
isprime[j]=false;
primes[psize++]=i;
}
} long long solve(long long n){
long long sum=1;
for (int i=0; primes[i]<=n && i<psize; i++) if (n%primes[i]==0){
long long asum=1;
while (n%primes[i]==0) n/=primes[i], asum++;
sum*=asum;
}return sum+((n>1)?sum:0);
} int main(void){
initPrime();
int T;
long long n, m; scanf("%d", &T);
for (int tcnt=1; tcnt<=T; tcnt++){
scanf("%lld%lld", &n, &m); if (m*m>=n){
printf("Case %d: 0\n", tcnt);
continue;
} long long ans=solve(n)/2;
for (int i=1; i<m; i++)
if (n%i==0) ans--;
printf("Case %d: %lld\n", tcnt, ans);
} return 0;
}
Time Memory Length Lang Submitted
2300ms 5972kB 1059 C++ 2018-05-15 23:28:44

LightOJ-1341 Aladdin and the Flying Carpet 分解质因数(注意对大素数的优化)的更多相关文章

  1. LightOJ 1341 - Aladdin and the Flying Carpet (唯一分解定理 + 素数筛选)

    http://lightoj.com/volume_showproblem.php?problem=1341 Aladdin and the Flying Carpet Time Limit:3000 ...

  2. LightOJ - 1341 Aladdin and the Flying Carpet 唯一分解定理LightOJ 1220Mysterious Bacteria

    题意: ttt 组数据,第一个给定飞毯的面积为 sss,第二个是毯子的最短的边的长度大于等于这个数,毯子是矩形但不是正方形. 思路: 求出 sss 的所有因子,因为不可能是矩形,所以可以除以 222, ...

  3. LightOJ 1341 Aladdin and the Flying Carpet 数学

    题意:给个矩形的面积a,和矩形的最小边长b,问有多少种矩形的方案(不能是正方形) 分析:a可以写成x,y,因为不能是正方形,所以设x<y,那么x<sqrt(a),y>sqrt(a) ...

  4. LightOJ 1341 Aladdin and the Flying Carpet【整数分解】

    题目链接: http://lightoj.com/login_main.php?url=volume_showproblem.php?problem=1341 题意: 给定一个数,将其拆分成两个数的乘 ...

  5. LightOJ 1341 Aladdin and the Flying Carpet(唯一分解定理)

    http://lightoj.com/volume_showproblem.php?problem=1341 题意:给你矩形的面积(矩形的边长都是正整数),让你求最小的边大于等于b的矩形的个数. 思路 ...

  6. LightOJ 1341 - Aladdin and the Flying Carpet 基本因子分解

    http://www.lightoj.com/volume_showproblem.php?problem=1341 题意:给你长方形的面积a,边最小为b,问有几种情况. 思路:对a进行素因子分解,再 ...

  7. LightOJ 1341 - Aladdin and the Flying Carpet

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1341 题意:给你地毯面积和最小可能边的长度,让你求有几种组合的可能. 题解:这题就厉害 ...

  8. LightOJ 1341 Aladdin and the Flying Carpet 算数基本定理

    题目大意:给出面积n,和最短边m,求能形成的矩形的个数(不能为正方形). 题目思路:根据算数基本定理有: 1.每个数n都能被分解为:n=p1^a1*p2^a2*^p3^a3……pn^an(p为素数); ...

  9. LightOJ 1341 Aladdin and the Flying Carpet(整数拆分定理)

    分析:题目并不难理解,就是一些细节上的优化需要我们注意,我在没有优化前跑了2000多MS,优化了一些细节后就是400多MS了,之前还TLE了好几次. 方法:将整数拆分为质因子以后,表达为这样的形式,e ...

随机推荐

  1. 20.boost dijkstra最短路径算法

    到某个点的最短距离                到终点的最短路径 完整代码 #include <iostream> #include <string> #include &l ...

  2. C# 比较两个数据的不同

    string[] arrRate = new string[] { "op1010", "op1020", "op1030", " ...

  3. win-visualviewport-space

    html.win-hoverable <div class="win-visualviewport-space"></div> <section cl ...

  4. 《Unix环境高级编程》读书笔记 第10章-信号

    1.引言 信号是软件中断. 信号提供了一种处理异步事件的方法. 2. 信号概念 信号的名字都是以3个字符SIG开头. Linux3.2.0支持31种信号.FreeBSD.Linux和Solaris作为 ...

  5. 优动漫PAINT-凌霄花画法

    再见小清新~这次教程教授的是凌霄花的画法!话说这个作者的花卉系列都很米粒啊~配色什么的,赞到没话说~ 教程是简单,呃.... 没有优动漫PAINT软件肿么办? 别着急,╭(╯^╰)╮ 小编给你送来了 ...

  6. 第五周-磁盘分区GPT、shell脚本练习、lvm详解

    1. 描述GPT是什么,应该怎么使用 Linux中磁盘分区分为MBR和GPT. MBR全称为Master Boot Record,为主引导记录,是传统的分区机制,应用于绝大多数使用的BIOS的PC设备 ...

  7. centos7.3安装php7.0

    需求:在Centos7.3下搭建LNMP环境 文章转载自:http://blog.csdn.net/wszll_alex/article/details/76285324 作者:狂热森林 . 关闭防火 ...

  8. docker安装MySQL8,目录挂载、配置用户名密码、忽略表名大小写、连接数、特殊字符、时区

    原文:docker安装MySQL8,目录挂载.配置用户名密码.忽略表名大小写.连接数.特殊字符.时区 一.环境配置 1.系统:centos7.3 2.docker版本:Docker version 1 ...

  9. CAD二次开发(01)-绘制直线

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  10. COGS——T 826. [Tyvj Feb11] GF打dota

    http://www.cogs.pro/cogs/problem/problem.php?pid=826 ★★☆   输入文件:dota.in   输出文件:dota.out   简单对比时间限制:1 ...