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 ...
随机推荐
- 使用Pyspark进行特征工程时的那些坑
以脚本spark_clean_online_action.py.数据集new_sxf_time_count_1781115582.csv为例: 集群节点包括212.216.217.218.需要注意的是 ...
- 一个很好用的在线编辑、展示、分享、交流JavaScript 代码的平台
在发表博客时,有一些代码只能粘贴进去,而不能看到代码运行的效果,需要读者把代码粘贴进自己的编辑器,然后再运行看效果,这是一件很耗时的事情 在平时百度的时候,我发现一些网站可以在线预览功能,而且可以在线 ...
- Linux系统本地yum源环境配置记录
由于IDC的一些服务器没有外网,不能对外访问.所以打算部署一套内网的yum源环境,以供内网服务器使用.以下简单记录下操作过程: 1)下载centos6.9和centos7.3的镜像,并挂载 [root ...
- xcode archive 去掉dsym文件和添加dsym文件
打包慢,让人发狂!!! 所以我们尝试的去掉一些测试时候用不到的东西 比如DSYM: 这DSYM是收集奔溃的.在测试的时候不需要这些东西的所以去掉就好: 项目 Build Settings -> ...
- 个人作业Week2-代码复审(修改明确了要求)
代码复审 零,说在前面的话 大家完成了个人项目之后,都写了很多代码. 这些代码可能: 大括号换行/不换行 使用tab缩进/使用空格缩进 变量名函数名的定义很好/不好 每个函数都有详细的注释解释函数的功 ...
- Linux内核分析作业 NO.7
可执行程序的装载 于佳心 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实 ...
- Freemaker的了解
freemarket 模板技术 与web容器没什么关系 可以用struct2作为视图组件 第一步导入jar包 项目目录下建立一个templates目录 在此目录下建立一个模板文件a.ftl文件 ...
- ChangeSort
package com.home.test; import java.util.Arrays; public class ChangeSort { public String[] changeLoca ...
- HDOJ2013_蟠桃记
水题 HDOJ2013_蟠桃记 #include<stdio.h> #include<stdlib.h> #include<math.h> #include< ...
- Fantacy团队周四站立会议
词频分析模型 1.会议时间:2016年3月31日12:07~12:30. 持续时长:23分钟 会议参加成员:组长:杨若鹏 http://www.cnblogs.com/robinYangRP/ 组员: ...