洛谷p1072 gcd,质因数分解
/*
可以得a>=c,b<=d,枚举d的质因子p
那么a,b,c,d,x中包含的p个数是ma,mb,mc,md,mx
在gcd(a,x)=c中
ma<mc => 无解
ma=mc => mx>=mc
ma>mc => mx=mc
在lcm(b,x)=d中
mb<md => mx=md
mb=md => mx<=md
mb>md => 无解
那么
ma==mc且mb==md时,mc<=mx<=md
ma>mc时 mx=mc,mb<md时,mx=md
令cntp表示x包含质因子p的方案数
预处理质数,找出所有d的质因子p,计算cntp,如果d自己也是质数,那么计算一次cntd即可
复杂度O(nsqrt(d)/logd)
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll a,b,c,d,x,ma,mb,mc,md,mx,tot,p[];
ll m,prime[],v[];
void init(int n){
memset(v,,sizeof v);
m=;
for(int i=;i<=n;i++){
if(v[i]==){
v[i]=i;
prime[++m]=i;
}
for(int j=;j<=m;j++){
if(prime[j]>v[i] || prime[j]>n/i) break;
v[i*prime[j]]=prime[j];
}
}
}
int divide(int n,int p){
int res=;
while(n%p==)res++,n/=p;
return res;
} int main(){
init(sqrt());//打表
int n;
scanf("%d",&n);
while(n--){
ll ans=,cnt,tot=,flag=;
scanf("%lld%lld%lld%lld",&a,&c,&b,&d);
int tmp=d;
for(int i=;i<=m;i++){//求出d的所有质因子
if(prime[i]>d) break;
if(d%prime[i]==) {
p[++tot]=prime[i];
while(d%prime[i]==) d/=prime[i];
}
}
if(d>)p[++tot]=d; d=tmp;
for(int i=;i<=tot;i++){
ma=divide(a,p[i]);
mb=divide(b,p[i]);
mc=divide(c,p[i]);
md=divide(d,p[i]);
if(ma<mc || mb>md)ans=;//不可能的情况
else if(ma==mc && mb==md){//两者都有多解
if(mc<=md) ans*=(md-mc+);
else ans=;
}
else if(ma==mc && mb<md){//只有一解,可能没有
if(mc>md) ans=;
}
else if(mb==md && ma>mc){
if(mc>md)ans=;
}
else if(mc!=md) ans=; if(ans==) break;
}
printf("%lld\n",ans);
}
}
这是进阶指南第一版的一道题,书上有个推论错了,,
洛谷p1072 gcd,质因数分解的更多相关文章
- 【题解】洛谷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 [NOIP2009] Hankson 的趣味题
P1072 Hankson 的趣味题 题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson 正在思考一 ...
- 洛谷P2398 GCD SUM (数学)
洛谷P2398 GCD SUM 题目描述 for i=1 to n for j=1 to n sum+=gcd(i,j) 给出n求sum. gcd(x,y)表示x,y的最大公约数. 输入输出格式 输入 ...
- 洛谷 - P1072 Hankson - 的趣味题 - 质因数分解
https://www.luogu.org/problemnew/show/P1072 一开始看了一看居然还想放弃了的. 把 \(x,a_0,a_1,b_0,b_1\) 质因数分解. 例如 \(x=p ...
- 洛谷P1072 Hankson 的趣味题(题解)
https://www.luogu.org/problemnew/show/P1072(题目传送) 数学的推理在编程的体现越来越明显了.(本人嘀咕) 首先,我们知道这两个等式: (a0,x)=a1,[ ...
- 洛谷P1072 Hankson 的趣味题
P1072 Hankson 的趣味题 题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson 正在思考一 ...
- 洛谷 P1890 gcd区间
P1890 gcd区间 题目提供者 洛谷OnlineJudge 标签 数论(数学相关) 难度 普及/提高- 题目描述 给定一行n个正整数a[1]..a[n]. m次询问,每次询问给定一个区间[L,R] ...
- 洛谷P2568 GCD(线性筛法)
题目链接:传送门 题目: 题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入输出格式 输入格式: 一个整数N 输出格式: 答案 输入输出样例 ...
- 洛谷P2568 GCD (欧拉函数/莫比乌斯反演)
P2568 GCD 题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入输出格式 输入格式: 一个整数N 输出格式: 答案 输入输出样例 输入 ...
随机推荐
- 11、JPA-JPQL
/** * JPQL,Java Persistence Query Language 的简称.是一种和 SQL 类似的中间性和对象化查询语言,它最终会被编译成针对不同底层数据库的 SQL 查询,从而屏 ...
- 关于spring事务
https://www.cnblogs.com/caoyc/p/5632963.html 这一篇博客讲的很清楚,一些参数和事务的概念 在serveice层中 每个方法都要写上关于事务的注解.这两个 ...
- C#多线程和异步(三)——一些异步编程模式
一.任务并行库 任务并行库(Task Parallel Library)是BCL中的一个类库,极大地简化了并行编程,Parallel常用的方法有For/ForEach/Invoke三个静态方法.在C# ...
- java RSA 加签验签【转】
引用自: http://blog.csdn.net/wangqiuyun/article/details/42143957/ java RSA 加签验签 package com.testdemo.co ...
- git 分支branch
转:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137584003893 ...
- POJ 2443 Set Operation
Set Operation Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 3558 Accepted: 1479 Des ...
- "飞机大战"游戏_Java
1 package cn.xiaocangtian.Util; import java.awt.Frame; import java.awt.Graphics; import java.awt.Ima ...
- Python排序算法之快速排序
快速排序(quickSort) 快排的思想:首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序. 百度百 ...
- Redis(二)冰叔带你了解Redis-哨兵模式和高可用集群解析
前言 Redis 的 主从复制 模式下,一旦 主节点 由于故障不能提供服务,需要手动将 从节点 晋升为 主节点,同时还要通知 客户端 更新 主节点地址,这种故障处理方式从一定程度上是无法接受的. ...
- 并行动画组QParallelAnimationGroup
QParallelAnimationGroup会同时执行添加到该组的所有动画 import sys from PyQt5.QtGui import QPixmap from PyQt5.QtCore ...