题意:给出a,b,问有多少种长方形满足面积为a,最短边>=b?

首先简单讲一下唯一分解定理。

唯一分解定理:任何一个自然数N,都可以满足:,pi是质数。

且N的正因子个数为(1+a1)*(1+a2)*(1+a3)*.......*(1+an)。

看了网络上很多人写的题解,普遍的做法是先找出N的所有正因子n,(n/2)就是在不考虑最短边>=b时所有存在的长方形,现在考虑最短边>=b,只需要减去所有能整除a且小于b的因子即可。

具体写法:

1.先预处理素数

2.用唯一分解定理求出N的所有因子

3.减去使得最短边<b的因子对

AC code:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
bool u[];
ll su[];
ll a,b,tmp,num,sum;
void olas()
{
num=;
memset(u,true,sizeof(u));
for(ll i=; i<=; i++)
{
if(u[i]) su[num++]=i;
for(ll j=; j<num; j++)
{
if(i*su[j]>) break;
u[i*su[j]]=false;
if(i%su[j]==) break;
}
}
}
void cal()
{
sum=;
for(ll i=; i<num&&su[i]<=sqrt(tmp); i++)
{
ll cc=;
while(tmp%su[i]==)
{
cc++;
tmp/=su[i];
}
sum*=(+cc);
}
if(tmp>) sum*=;
}
int main()
{
//freopen("input.txt","r",stdin);
olas();
ll T,kase=;
scanf("%lld",&T);
while(T--)
{
scanf("%lld%lld",&a,&b);
if(a<b*b) printf("Case %lld: 0\n",kase++);
else
{
tmp=a;
cal();
sum/=;
for(ll i=; i<b; i++)
{
if(a%i==) sum--;
}
printf("Case %lld: %lld\n",kase++,sum);
}
}
return ;
}

存疑:

虽然说按照以上写法可以AC,考虑到有T可以取到4000,b可以取到1000000,假设有测试数据如下:

T = 4000

case 1:a=10^12 ,b=10^6

case 2:a=10^12 ,b=10^6-1

case 3:a=10^12 ,b=10^6-2

.......

case 4000:a=10^12,b=10^6-3999

这样一来由于每次都遍历了1->b,真实时间复杂度>O(4000*10^6)在3000ms内必然TLE。

但是本题不存在这样的测试数据。。。。。。。所以可以直接水过。。

Aladdin and the Flying Carpet LightOJ 1341 唯一分解定理的更多相关文章

  1. Aladdin and the Flying Carpet (LightOJ - 1341)【简单数论】【算术基本定理】【分解质因数】

    Aladdin and the Flying Carpet (LightOJ - 1341)[简单数论][算术基本定理][分解质因数](未完成) 标签:入门讲座题解 数论 题目描述 It's said ...

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

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

  3. [LightOJ 1341] Aladdin and the Flying Carpet (算数基本定理(唯一分解定理))

    题目链接: https://vjudge.net/problem/LightOJ-1341 题目描述: 问有几种边长为整数的矩形面积等于a,且矩形的短边不小于b 算数基本定理的知识点:https:// ...

  4. Aladdin and the Flying Carpet LightOJ - 1341 (素数打表 + 算术基本定理)

    题意: 就是求a的因数中大于b的有几对 解析: 先把素数打表 运用算术基本定理 求出a的所有因数的个数 然后减去小于b的因数的个数 代码如下: #include <iostream> #i ...

  5. LightOJ 1341 唯一分解定理

    Aladdin and the Flying Carpet Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%lld &a ...

  6. LightOJ - 1341唯一分解定理

    唯一分解定理 先分解面积,然后除2,再减去面积%长度==0的情况,注意毯子不能是正方形 #include<map> #include<set> #include<cmat ...

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

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

  8. LightOJ1341 Aladdin and the Flying Carpet —— 唯一分解定理

    题目链接:https://vjudge.net/problem/LightOJ-1341 1341 - Aladdin and the Flying Carpet    PDF (English) S ...

  9. Aladdin and the Flying Carpet

    Aladdin and the Flying Carpet https://cn.vjudge.net/contest/288520#problem/C It's said that Aladdin ...

随机推荐

  1. Jenkins配置LDAP认证

    managerdn即为连接到AD的账号

  2. Java网上体育商城系统ssh

    网上体育商城的主要功能包括:前台用户登录退出.注册.在线购物.修改个人信息.后台商品管理等等.本系统结构如下:(1)商品浏览模块:        首页浏览最新上市商品,按销量排行显示商品        ...

  3. Comet OJ-2019国庆欢乐赛

    国庆玩的有点嗨,开学了补题. A轰炸平面镇魂曲 题目描述 虹村万泰是一位二维世界的替身使者,他的替身 "轰炸平面镇魂曲" 能产生一条直线分割整个平面. 一开始,平面上有一个矩形,其 ...

  4. C#关键字 const与readonly

    ====const==== const关键字来声明某个常量字段或常量局部变量.常量字段和常量局部变量不是变量而且不能修改.常量可以为数字.布尔值.字符串或null引用. 常数声明的类型指定声明引入的成 ...

  5. E203 同步fifo

    1. 输入端, 输入信号, i_vld,表示输入请求写同步fifo,如果fifo不满,则fifo发送i_rdy 到输入端,开始写fifo.i_vld和i_rdy是写握手信号. 2.输出端 o_rdy表 ...

  6. Objective-C学习——中文URL编码和解码

    发现NSString类中有内置的方法可以实现.他们分别是: - (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncod ...

  7. iOS开发 简单实现视频音频的边下边播 (转)

      1.ios视频音频边缓存边播放,缓存时可以在已下载的部分拖拽进度条. 3.无论是下载到一半退出还是下载完退出,已缓存的数据都存到自己指定的一个路径.如果已下载完,下次播放时可以不再走网络,直接播放 ...

  8. SUSE12-SP2安装教程(虚拟机)

    创建虚拟机,安装系统,安装系统后的系统设置 创建虚拟机 将SUSE12-SP2镜像(大于3G)上传到虚拟机主机存储. 创建虚拟机创建虚拟机,CPU>=8核,内存>=16G(注:我这里仅演示 ...

  9. jmeter连接并使用mysql数据

    一.下载数据库驱动,放至D:\apache-jmeter-2.13\lib\ext目录下 二.打开jmeter,右键添加->配置文件->JDBC Connection Configurat ...

  10. liteos错误处理(十一)

    1. 概述 1.1 基本概念 错误处理指用户代码发生错误时,系统调用错误处理模块的接口函数,完成上报错误信息,并调用用户自己的钩子函数,进行特定的处理. 错误处理模块实现OS内部错误码记录功能.OS内 ...