luogu1072 [NOIp2009]Hankson的趣味题 (数学+STL::set)
一个JSB做法
由$\frac{x*b0}{gcd(x,b0)}=b1$,可得$\frac{x}{gcd(x,b0)}=\frac{b1}{b0}$
设$b2=\frac{b1}{b0}$
所以对$b2$和$b0$分解质因数,可以得到结论:
1.x必须包含b2中所有的质因数,且个数等于它在b2和b0(如果b0中有的话)中的数量和
2.对于b0中有但b2中没有的质因数,x中它的个数可以是[0,b0中的个数]
然后关于a0和a1,也有结论:
1.x中必须包含a1中的所有质因数
2.x中不能包含a0中的、a1以外的(在数量和种类方面)质因数
然后就可以开始乱搞了
首先打出1e5以内的素数,然后拿着它们分解质因数(因为我只需要做到$\sqrt{N}$)。注意一个数如果最后剩下不是1,那么剩下这个数也是个质因数(大于$\sqrt{N}$)
然后把这些存到set里,按照上面的规则乱搞......
一个数最多大概也就十几种质因数,所以复杂度没什么问题。
#include<bits/stdc++.h>
#define pa pair<int,int>
#define IT set<pa>::iterator
#define CLR(a,x) memset(a,x,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn=1e5+,inf=2e9+; inline ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} bool ispri[maxn];
int pri[maxn],pct;
set<pa> g[]; inline void get(int id,int x){
g[id].clear();
for(int i=;x>&&i<=pct;i++){
if(x<pri[i]) break;
if(x%pri[i]) continue;
int cnt=;
while(x%pri[i]==) x/=pri[i],cnt++;
g[id].insert(make_pair(pri[i],cnt));
}
if(x!=) g[id].insert(make_pair(x,)); } int main(){
int i,j;
int N=rd();
CLR(ispri,);ispri[]=ispri[]=;
for(i=;i<=;i++){
if(ispri[i]){
for(j=i+i;j<=;j+=i){
ispri[j]=;
}
}
}for(i=,j=;i<=;i++) if(ispri[i]) pri[++pct]=i;
for(i=;i<=N;i++){
int a1=rd(),a2=rd(),b1=rd(),b2=rd();
int b3=b2/b1;
get(,a1);get(,a2);get(,b1);get(,b3);
g[].clear();
for(IT it=g[].begin();it!=g[].end();it++){
IT it2=g[].lower_bound(make_pair(it->first,-));
if(it2->first!=it->first) g[].insert(make_pair(it->first,));
else if(it2->second!=it->second) g[].insert(make_pair(it->first,it2->second));
else g[].insert(make_pair(it->first,-it2->second));
}
int ans=;
for(IT it=g[].begin();it!=g[].end();it++){
IT it2=g[].lower_bound(make_pair(it->first,-inf));
IT it3=g[].lower_bound(make_pair(it->first,-inf));
if(it->second&&it2->first!=it->first&&it3->first!=it->first) ans=;
if(it->first==it3->first&&it2->first!=it->first&&((it->second>=&&it3->second!=it->second)||(it->second<&&(-it->second)>it3->second))) ans=;
}
if(!ans) {printf("0\n");continue;}
for(IT it=g[].begin();it!=g[].end()&&ans;it++){
IT it2=g[].lower_bound(make_pair(it->first,-inf));
IT it3=g[].lower_bound(make_pair(it->first,-inf));
if(it2->first!=it->first){
if(it3->first!=it->first) ans*=it->second+;
else if(abs(it3->second)>it->second) ans=;
else if(it3->second<) ans*=it->second+it3->second+;
}else{
if(it3->first!=it->first);
else if(it3->second>=&&it3->second!=it2->second+it->second) ans=;
else if(it3->second<&&it2->second+it->second<-it3->second) ans=;
}
}
printf("%d\n",ans);
}
return ;
}
luogu1072 [NOIp2009]Hankson的趣味题 (数学+STL::set)的更多相关文章
- 洛谷P1072 [NOIP2009] Hankson 的趣味题
P1072 Hankson 的趣味题 题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson 正在思考一 ...
- NOIP2009 Hankson 的趣味题 : 数论
题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson 正在思考一个有趣的问题. 今天在课堂上,老师讲解 ...
- NOIP2009 Hankson的趣味题
题目描述 Description Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫Hankson.现在,刚刚放学回家的Hankson 正在思考一个有趣的问题.今天在 ...
- [NOIP2009] $Hankson$ 的趣味题 (数论,gcd)
题目链接 Solution 此题,用到的结论都是比较浅显的,但是,我竟然没想到反过来枚举... 只有50分... 被自己蠢哭... 结论比较浅显: 1.对于两个正整数\(a\),\(b\),设 \(g ...
- [NOIp2009] $Hankson$ 的趣味题
类型:数论 传送门:>Here< 题意:给出四个数$a_0,a_1,b_0,b_1$,求满足$gcd(x,a_0)=a_1,lcm(x,b_0)=b_1$的$x$的个数 解题思路 显然$a ...
- 洛谷P1072 Hankson 的趣味题(数学)
题意 题目链接 Sol 充满套路的数学题.. 如果你学过莫比乌斯反演的话不难得到两个等式 \[gcd(\frac{x}{a_1}, \frac{a_0}{a_1}) = 1\] \[gcd(\frac ...
- NOIP 2009 Hankson 的趣味题
洛谷 P1072 Hankson 的趣味题 洛谷传送门 JDOJ 1648: [NOIP2009]Hankson的趣味题 T2 JDOJ传送门 Description Hanks 博士是BT (Bio ...
- 「NOIP2009」Hankson 的趣味题
Hankson 的趣味题 [内存限制:$128 MiB$][时间限制:$1000 ms$] [标准输入输出][题目类型:传统][评测方式:文本比较] 题目描述 Hanks 博士是 BT(Bio-Tec ...
- CH3201 Hankson的趣味题
题意 3201 Hankson的趣味题 0x30「数学知识」例题 描述 Hanks博士是BT(Bio-Tech,生物技术)领域的知名专家,他的儿子名叫Hankson.现在,刚刚放学回家的Hankson ...
随机推荐
- 关于小程序登录时获取openId和unionId走过的坑
目前的项目是在做小程序这方面的,接触过的人应该都知道,同一个微信开放平台下的相同主体的App.公众号.小程序的unionid是相同的,这样就可以锁定是不是同一个用户.微信针对不同的用户在不同的应用下都 ...
- java.lang.IllegalStateException: Failed to load property source from location 'classpath:/application-dev.yml'
如果你的项目没有配置错误,配置文件名称也正常,还出现这个问题,那一定是你的yml文件编码的问题 先附上一张项目架构图 当我启动服务器寻找配置文件的时候,服务器提示这样的错误信息 java.lang.I ...
- QZEZ第一届“饭吉圆”杯程序设计竞赛
终于到了饭吉圆杯的开赛,这是EZ我参与的历史上第一场ACM赛制的题目然而没有罚时 不过题目很好,举办地也很成功,为法老点赞!!! 这次和翰爷,吴骏达 dalao,陈乐扬dalao组的队,因为我们有二个 ...
- zjoi2018 day1游记
咕咕咕 upd:看见有人贴上zhihu的问题,那个我早就看到了... 谴责一番题主 @gzy_cjoier 阅读量马上700没想到吧 既然这么火我挂个广告吧 永别,OI 听说有人催更??
- tomcat多实例方案启动脚本
批量启动 #!/bin/sh BASE_PATH="/usr/local/tomcat8/tomcat-ins/"bash $BASE_PATH/web1/tomcat.sh st ...
- C# 8中的Async Streams
关键要点 异步编程技术提供了一种提高程序响应能力的方法. Async/Await模式在C# 5中首次亮相,但只能返回单个标量值. C# 8添加了异步流(Async Streams),允许异步方法返回多 ...
- hive基础操作—(1)
执行./hive命令后,进入CLI(shell)模式: 1.创建数据库,语句: create database school; 2.展示所有的数据库,语句: show databases; 3.选择使 ...
- 2016.3.24 OneZero站立会议
会议时间:2016.3.24 15:35-15:55 会议成员:王巍 夏一名 冉华 张敏 会议内容: 1.确立UI界面原形(见http://www.cnblogs.com/zhangminss/p/5 ...
- Java读取oracle数据库中blob字段数据文件保存到本地文件(转载)
转自:https://www.cnblogs.com/forever2698/p/4747349.html package com.bo.test; import java.io.FileOutput ...
- android计算器
一:引言 目前手机可以说是普及率非常高的电子设备了,由于其便于携带,使用方便,资费适中等等原因,现在手机已经在一定程度开始代替固定电话的通话功能,以及一些原来电脑软件上的功能了.手机上的软件也随 ...