LightOJ 1341 - Aladdin and the Flying Carpet

传送门

1341 - Aladdin and the Flying Carpet

    PDF (English) Statistics Forum
Time Limit: 3 second(s) Memory Limit: 32 MB

It's said that Aladdin had to solve seven mysteries before getting the Magical Lamp which summons a powerful Genie. Here we are concerned about the first mystery.

Aladdin was about to enter to a magical cave, led by the evil sorcerer who disguised himself as Aladdin's uncle, found a strange magical flying carpet at the entrance. There were some strange creatures guarding the entrance of the cave. Aladdin could run,
but he knew that there was a high chance of getting caught. So, he decided to use the magical flying carpet. The carpet was rectangular shaped, but not square shaped. Aladdin took the carpet and with the help of it he passed the entrance.

Now you are given the area of the carpet and the length of the minimum possible side of the carpet, your task is to find how many types of carpets are possible. For example, the area of the carpet 12, and the minimum possible side of the carpet is 2, then
there can be two types of carpets and their sides are: {2, 6} and {3, 4}.

Input

Input starts with an integer T (≤ 4000), denoting the number of test cases.

Each case starts with a line containing two integers: a b (1 ≤ b ≤ a ≤ 1012) where a denotes the area of the carpet and b denotes the minimum possible side of the carpet.

Output

For each case, print the case number and the number of possible carpets.

Sample Input

Output for Sample Input


2

10 2

12 2


Case 1: 1

Case 2: 2

 

题目大意:

给定T组数据,每组数据有两个数 面积s 和 矩形的宽 a,让你求的是在面积s一定的情况下,假设长和宽分别为a
和 b,最小的边长 >= a的有几种方式可以组成矩形(不是正方形)

解析一下样例:

面积为12 ,最小的边长为2:

首先将12进行素因子分解12 = 2^2*3,所以我们能够得到 

12 = 1 * 12(不符合条件 最小的边长<2)

12 = 2 * 6(符合)

12 = 3 * 4(符合)

所以有 2 种方式,输出 2

解题思路:

每次做题的时候先要考虑一下能不能暴力(暴力简单),这个题如果我们要暴力的话肯定会超时,所以就不要暴力了

通过上述的样例分析,我们也知道了我们首先要做的就是将 面积 s 进行素因子分解,这就用到了唯一分解定理,

s = p1^e1 * p2^e2 *……* pk^ek,我们要得到的是因子的个数,这里所说的因子个数默认为正的,得到因子个数的方法是 num = (e1+1) * (e2+1) * ... *(ek+1),然后又因为没有正方形,而且我们要得到的是有多少对,所以将
num除以2,就得到了可以组成矩形面积为 s 的矩形个数,然后我们只需要在 [1,a)的区间内(注意区间开闭)将 s 的因子减掉就行了(num--),这样就可以了。

上代码:

#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
typedef long long LL;
const int MAXN = 1e6+5;
bool prime[MAXN];
LL p[MAXN],k;
void isprime()
{
    memset(prime, true, sizeof(prime));
    prime[1] = false;
    k = 0;
    for(LL i=2; i<MAXN; i++)
    {
        if(prime[i])
        {
            p[k++] = i;
            for(LL j=i*i; j<MAXN; j+=i)
                prime[j] = false;
        }
    }
}

LL Solve(LL m)
{
    LL ret = 1;
    for(LL i=0; p[i]*p[i]<=m&&i<k; i++)
    {
        LL cnt = 0;
        if(m%p[i] == 0)
        {
            while(m%p[i] == 0)
            {
                cnt++;
                m /= p[i];
            }
            ret *= (cnt+1);
        }
    }
    if(m > 1)
        ret *= 2;
    return ret;
}
int main()
{
    isprime();
    int T;
    cin>>T;
    for(int cas=1; cas<=T; cas++)
    {
        LL s,a;
        cin>>s>>a;
        if(a*a >= s)
            printf("Case %d: 0\n",cas);
        else
        {
            LL ret = Solve(s);
            ret /= 2;
            for(LL i=1; i<a; i++)
                if(s % i == 0)
                    ret--;
            printf("Case %d: %lld\n",cas,ret);
        }
    }
    return 0;
}
时间: 2024-12-30 09:50:50

LightOJ 1341 - Aladdin and the Flying Carpet的相关文章

LightOJ 1136 Division by 3 (想法题)

http://www.lightoj.com/volume_showproblem.php?problem=1136 开始打算解二次同余的,算了一会发现有很多解..-->转而分析序列结构. 分析发现: 连续三个整数并排在一起组成的数的数字和必然能被3整除.(x+x+1+x+2=3x+3=3(x+1)) 从而有: 1.题目中的第3k个数,必然能被三整除. 2. 题目中的第3k + 1个数,其第2个数字到最末一个数字之和必然能被3整除,再加上第一个数字,也就是1,就不能被3整除了. 3. 题目中的第

【Aladdin Unity3D Shader编程】之一 基本入门

OpenGL.DirectX以及GLSL.HLSL.CG OpenGL和DirectX是图像应用编程接口,用于渲染二维或者三维图形. GLSL着色语言是用来在OpenGL中着色编程的语言,有点在于跨平台性,可以再Windows.Linux.Mac甚至移动平台上工作. HLSL是微软控制着色的编译,几乎只支持微软自己的产品,如Windows,XBox等,其他平台没有可编译HLSL的编译器. CG是有英伟达公司出的真正意义上的跨平台着色器语言. GPU渲染管线概述 1.顶点着色器 顶点着色器是流水线

LightOJ 1370 Bi-shoe and Phi-shoe(素数筛)

Click Here~~ A - Bi-shoe and Phi-shoe Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Submit Status Practice LightOJ 1370 Description Bamboo Pole-vault is a massively popular sport in Xzhiland. And Master Phi-shoe is a very popular

[Aladdin] SVN 常用批处理

前言 批处理是公司开发必备,减少我们手动操作的工作量.前提得搭建一个SVN Server,这个自行百度! Checkout @echo off echo ========================================== echo = Aladdin Version 1.0" = echo ========================================== svn checkout https://svn.vxw.online/svn/dxw.test/ pa

【Aladdin Unity3D Shader编程】之三 光照模型(二)

高光反射模型 Specular=直射光*pow(cosθ,高光的参数) θ:是反射光和视野方向的夹角 编写高光反射Shader Shader "AladdinShader/07 Specular Vertex Shader" { Properties { _Diffuse("Diffuse",Color)=(1,1,1,1) //添加自身的颜色 } SubShader { Pass { Tags{"LightMode"="Forward

【Aladdin Unity3D Shader编程】之二 光照模型(一)

光照模型 光照模型就是一个公式,使用这个公式来计算在某个点的光照效果. 在标准光照模型里面,我们把进入摄像机的光分为下面四个部分: * 自发光 类似生活中的萤火虫等自己能够发光 * 高光反射 类似生活中的镜子,近似认为百分百反射出去 * 漫反射 类似生活中的光照射到墙壁上.桌子上的反光不会百分百反射出去,各个方向都会反射. * 环境光 类似生活中的光照照射在某个物体上,物体漫反射然后反射到其他物体上这些过程的光是环境光. 以上都是模拟生活中的光照效果,并不等同于实际生活中的光照计算,实际生活中的

hdu 1800 Flying to the Mars

点击打开hdu 1800 题意:有n个士兵每个人有一个能力值d,现在士兵要去学习如何飞到火星.规定如下,能力值大的可以教能力值小的并且每个人只能由一个人来教,而且每个人只能够教一个人.规定一起学习的人的书本是一样的,问最少需要几本书 思路:根据题目的意思是我们可以知道最终要求的就是有几个递减的序列,也就是找到最多重复的值.比如2 3 4 3 4 就是两个递减序列4 3 2 和 4 3.那么我们只要对这些的值插入到字典树即可,利用字典树的性质找到最多重复的个数.但是要注意前缀,在字典树中001和0

LightOJ 1245 - Harmonic Number (II) (找规律)

传送门 1245 - Harmonic Number (II)   PDF (English) Statistics Forum Time Limit: 3 second(s) Memory Limit: 32 MB I was trying to solve problem '1234 - Harmonic Number', I wrote the following code long long H( int n ) {     long long res = 0;     for( int

B - Pairs Forming LCM——(LightOJ 1236)

传送门 password:nefu Find the result of the following code: long long pairsFormLCM( int n ) { long long res = 0; for( int i = 1; i <= n; i++ ) for( int j = i; j <= n; j++ ) if( lcm(i, j) == n ) res++; // lcm means least common multiple