LightOJ1341-Aladdin and the Flying Carpet 【唯一分解定理】

Aladdin and the Flying Carpet

题目

给一对数字 a,b ,a是一个长方形的面积,问有多少种整数的边的组合可以组成面积为a的长方形,要求最短的边不得小于b。一共询问T<=4000次

分析

首先我们把面积进行质因数分解,得
所以其因子个数就是
此题目的就是让选出合法的因子,我们可以发现x*y = N,选x选y都一样,x!=y,所以本题答案就是 res = cnt/2-小于b的因子,因为本题只需要长方形,所以cnt/2,会自动把x*x = N这种情况去掉。

关于为何打一个小于1e6的质数表就够了

因为我们是要用质数表来选质因数分解,假如N中有且仅有一个因子x且大于1e6,他会在质因数分解迭代完之后自身变成x。代码中这句就是考虑了这种情况if(x>1) res*=2;。所以打一个1e6的质数表就够了。

AC代码

#include <iostream>
#include <algorithm>
#include <cmath>
#include <stdio.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6+10;

ll T,N,b;
ll P[maxn],tail;
bool vis[maxn];

void init(){
    int len = (int)sqrt(maxn)+1;
    for(int i = 2;i<=len;i++){
        if(!vis[i]){
            for(ll j = i*i;j<maxn;j+=i){
                vis[j] = true;
            }
        }
    }
    for(int i =2;i<maxn;i++){
        if(!vis[i]) P[tail++] = i;
    }

}

ll get_div(ll x){
    ll res = 1;
    for(int i = 0;i<tail && P[i]*P[i]<=x;i++){ //因为P[i]是从小到大遍历的,是所以当P[i]*P[i]>x时,此时他就已经没有除自身之外其他质因数了
        if(x%P[i] == 0){
            ll cnt = 0;
            while(x%P[i] == 0){
                cnt++;
                x/=P[i];
            }
            res *= cnt+1;
        }
    }
    if(x>1) res*=2;
    return res;
}
int main(){
    init();
    cin>>T;
    int kase = 0;
    while(T--){
        scanf("%lld %lld",&N,&b);
        if(b*b>N){
            printf("Case %d: %d\n",++kase,0);
        }else{
            ll cnt = 0;
            for(int i = 1;i<b;i++) if(N%i == 0) cnt++;
            ll res = get_div(N);
            res/=2;
            printf("Case %d: %lld\n",++kase,res-cnt);
        }
    }
    return 0;
}
全部评论

相关推荐

工作基本定了,比较满意。这深度学习真是难搞啊,论文看不懂,代码看不懂,不会改,创新点???&nbsp;还有一个月中期,怎么搞,已经抑郁了,没有小论文要求,我真是非常幸运了,不然就我这科研能力…………&nbsp;感觉自己对自己失去信心,无时无刻不在否定自己取得一些成绩都是运气好罢了,真的能顺利毕业吗?严重内耗、无力感爆棚啊…………
AI牛可乐:哎呀,听起来你最近压力好大呀,毕业论文和工作的双重压力一定让你感觉像是背了两座山呢。深度学习确实挺复杂的,就像是要在一片迷雾中找到出路一样。但是,你已经很棒了,工作都定好了,这是很大的成就呢! 论文的事情,别太担心。每个人都有看不懂代码和论文的时候,这是正常的。至于创新点嘛,有时候灵感就像小猫一样,需要一点一点地哄出来的。你可以先试试把你看过的资料整理一下,说不定就能找到新的思路呢。 中期答辩前,你可以列个计划,一步一步来,把大问题分解成小问题,一点一点克服。记得,你不是一个人在战斗,你的导师、同学都是你的战友哦。 至于信心嘛,别否定自己,每个人都会有低谷的时候。你已经取得的成绩,都是你实力的体现。毕业不是问题,只要你不放弃,就一定能顺利走过去的。加油哦,我相信你可以的! 对了,如果你愿意的话,可以点击我的头像,我们私信聊,也许我能帮你出出主意,或者就是简单地聊聊天,分散一下你的注意力也好呀。🐮💪🌟
点赞 评论 收藏
分享
头像
11-27 17:08
已编辑
牛客_产品运营部_私域运营
腾讯 普通offer 24k~26k * 15,年包在36w~39w左右。
点赞 评论 收藏
分享
三年之期已到我的offer快到碗里来:9硕都比不上9本
点赞 评论 收藏
分享
10-28 14:42
门头沟学院 Java
watermelon1124:因为嵌入式炸了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务