洛谷 P1072 Hankson 的趣味题 —— 质因数分解
题目:https://www.luogu.org/problemnew/show/P1072
满足条件的数 x 一定是 a1 的倍数,b1 的因数,a0/a1 与 x/a1 互质,b1/b0 与 b1/x 互质;
按质因子来看,满足要求的数 x 的某个质因子 pi 的次数应该:
1.大于等于 a1 的,小于等于 b1 的;
2.如果 a0/a1 有 pi 剩余,则 x 的 pi 的次数只能是 a1 的 pi 的次数(无选择余地,不贡献答案);
3.如果 b1/b0 有 pi 剩余,则 x 的 pi 的次数只能是 b1 的 pi 的次数(同上);
然后要注意条件2,3之间可能有冲突,判掉即可。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
typedef long long ll;
int const xn=;
int n,cnt,p[xn],k[][xn];
map<int,int>mp;
int rd()
{
int ret=,f=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=; ch=getchar();}
while(ch>=''&&ch<='')ret=(ret<<)+(ret<<)+ch-'',ch=getchar();
return f?ret:-ret;
}
void solve(int x,int l)
{
for(int i=;i*i<=x;i++)
{
if(x%i)continue;
if(!mp[i])mp[i]=++cnt,p[cnt]=i; int t=mp[i];
while(x%i==)k[l][t]++,x/=i;
}
if(x==)return;
if(!mp[x])mp[x]=++cnt,p[cnt]=x; k[l][mp[x]]=;
}
int main()
{
n=rd();
while(n--)
{
ll ans=; bool fl=; memset(k,,sizeof k); cnt=; mp.clear();
for(int i=,x;i<;i++)x=rd(),solve(x,i);
// printf("cnt=%d\n",cnt);
// for(int i=1;i<=cnt;i++)
// {
// printf("p[%d]=%d:",i,p[i]);
// for(int j=0;j<4;j++)printf("k[%d]=%d ",j,k[j][i]);
// printf("\n");
// }
for(int i=;i<=cnt;i++)
{
if(k[][i]>k[][i]||k[][i]<k[][i]||k[][i]<k[][i]){fl=; break;}
if(k[][i]!=k[][i]&&k[][i]!=k[][i]&&k[][i]!=k[][i])
{fl=; break;}//必须有 lcm--i -><-必须有 gcd--i //!!!
if(k[][i]!=k[][i]||k[][i]!=k[][i])continue;//则 i 处无选择余地
ans=ans*(k[][i]-k[][i]+);
}
if(fl)printf("0\n");
else printf("%lld\n",ans);
}
return ;
}
洛谷 P1072 Hankson 的趣味题 —— 质因数分解的更多相关文章
- 洛谷 - P1072 Hankson - 的趣味题 - 质因数分解
https://www.luogu.org/problemnew/show/P1072 一开始看了一看居然还想放弃了的. 把 \(x,a_0,a_1,b_0,b_1\) 质因数分解. 例如 \(x=p ...
- 洛谷 P1072 Hankson 的趣味题 解题报告
P1072 \(Hankson\)的趣味题 题目大意:已知有\(n\)组\(a0,a1,b0,b1\),求满足\((x,a0)=a1\),\([x,b0]=b1\)的\(x\)的个数. 数据范围:\( ...
- 洛谷P1072 Hankson 的趣味题
P1072 Hankson 的趣味题 题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson 正在思考一 ...
- Java实现洛谷 P1072 Hankson 的趣味题
P1072 Hankson 的趣味题 输入输出样例 输入 2 41 1 96 288 95 1 37 1776 输出 6 2 PS: 通过辗转相除法的推导 import java.util.*; cl ...
- 【题解】洛谷P1072 Hankson的趣味题 (gcd和lcm的应用)
洛谷P1072:https://www.luogu.org/problemnew/show/P1072 思路 gcd(x,a0)=a1 lcm(x,b0)=b1→b0*x=b1*gcd(x,b0) ( ...
- 洛谷P1072 Hankson 的趣味题(题解)
https://www.luogu.org/problemnew/show/P1072(题目传送) 数学的推理在编程的体现越来越明显了.(本人嘀咕) 首先,我们知道这两个等式: (a0,x)=a1,[ ...
- 洛谷 1072 Hankson 的趣味题——质因数界限讨论
题目:https://www.luogu.org/problemnew/show/P1072 思路是把每个数质因数分解,答案对于每个质因数的次数有选择的区间,通过这个计算. 指数的限制就是上限是b1, ...
- 洛谷 P1072 Hankson 的趣味题 || 打质数表的分解质因数
方法就是枚举,根据b0和b1可以大大减小枚举范围,方法类似这个http://blog.csdn.net/hehe_54321/article/details/76021615 将b0和b1都分解质因数 ...
- 洛谷P1072 Hankson的趣味题
这是个NOIP原题... 题意: 给定 a b c d 求 gcd(a, x) = b && lcm(c, x) = d 的x的个数. 可以发现一个朴素算法是从b到d枚举,期望得分50 ...
随机推荐
- POJ 2115 C Looooops【数论】
很容易看出来一个同余式,说到底是解一个线性同余方程,计算机解通常有拓展欧几里得和欧拉定理两种算法,参照去年的NOIP水题,问题是这题数据范围是2^32所以要int64 TAT #include< ...
- 【数学】codeforces A. Success Rate
http://codeforces.com/contest/773/problem/A [思路] 用 (x+a)/(y+b) = p/q 来表示其核心思想,其中a 为做对的题目,b为做的题目,则有x+ ...
- linux命令1——基础
Rm 删除命令 Rm [选项][文件] 删除一个文件或者目录 选项:r 递归的删除文件夹及其子文件,f 忽略不存在的文件(不提示) (2)rm删除目录下所有文件,但不删除目录 >>rm - ...
- rabbitmq management Login Failed
默认用户guest 只允许localhost登录. so... 我们自己建立用户 1. 用户管理 用户管理包括增加用户,删除用户,查看用户列表,修改用户密码. 相应的命令 (1) 新增一个用户 rab ...
- 最近公共祖先(Least Common Ancestors)
题意: 给定一棵有根树T,给出若干个查询lca(u, v)(通常查询数量较大),每次求树T中两个顶点u和v的最近公共祖先,即找一个节点,同时是u和v的祖先,并且深度尽可能大(尽可能远离树根).通常有以 ...
- hdu6196 happpy happy happy (meet in middle + 剪枝)
题意 从1到n共计n(<=90)个物品,每个物品有一个价值a[i],儿子和爸爸轮流做游戏,儿子先手.儿子每次选价值最大的{最左边,最右边}的物品,如果价值一样大, 则选取最左边的物品. 爸爸每次 ...
- Linux 常用但较容易忘记的命令
看死循环 strace -p pid 查看系统版本 cat /etc/issue 设置内核启动版本 /etc/lilo.conf , /boot/grub/grub.conf 设置启动模式 /etc ...
- Go -- 多个go文件包名都是main
用go run *.go 或 go run one.go two.go main.go
- php 获取TZ时间格式
php将时间格式化成T Z的方法 gmdate("c") 这个函数的用法,学会了吧!!! <?php var_dump(gmdate("c")); ini ...
- 每天一个JavaScript实例-获取元素当前高度
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...