[NOIp2009] luogu P1072 Hankson 的趣味题
把 c 改成 d 下了两个点。
题目描述
已知正整数 a0,a1,b0,b1a_0,a_1,b_0,b_1a0,a1,b0,b1,设某未知正整数 xxx 满足:
- xxx 和 a0a_0a0 的最大公约数是 a1a_1a1;
- xxx 和 b0b_0b0 的最小公倍数是 b1b_1b1。
求满足条件的 xxx 的个数。
Solution 1
考虑一个式子。∀a,b∈N∗\forall a,b\in\N^*∀a,b∈N∗ 有a×b=gcd(a,b)×lcm(a,b)a\times b=\gcd(a,b)\times\text{lcm}(a,b)a×b=gcd(a,b)×lcm(a,b)
枚举 gcd(x,b0)\gcd(x,b_0)gcd(x,b0),算出 xxx,判断 xxx 是否满足 1. 条件。统计答案,输出。时间复杂度 O(Tb1⋅lgb1)O(T\sqrt{b_1}·\lg b_1)O(Tb1⋅lgb1)。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define int long long
int T;
int a,b,c,d;
int check(int Gcd){
int x=d/c*Gcd;
if(std::__gcd(c,x)!=Gcd) return 0;
if(std::__gcd(x,a)!=b) return 0;
return 1;
}
int work(){
int sum=0;
for(int i=1;i*i<=d;++i){
if(d%i) continue;
sum+=check(i);
if(i*i!=d) sum+=check(d/i);
}
return sum;
}
signed main(){
scanf("%lld",&T);
while(T--){
scanf("%lld%lld%lld%lld",&a,&b,&c,&d);
printf("%lld\n",work());
}
}
Solution 2 By @zzlzk
容易想到,∀a,b,k∈N∗\forall a,b,k\in\N^*∀a,b,k∈N∗ 有gcd(a,b)=k⇔gcd(ak,bk)=1\gcd(a,b)=k\quad\Leftrightarrow\quad\gcd(\frac ak,\frac bk)=1gcd(a,b)=k⇔gcd(ka,kb)=1
化一下式子,得到
{gcd(xa1,a0a1)=1,gcd(b1b0,b1x)=1.\begin{cases}\gcd(\frac x{a_1},\frac{a_0}{a_1})=1,\\ \gcd(\frac{b_1}{b_0},\frac{b_1}x)=1.\end{cases}{gcd(a1x,a1a0)=1,gcd(b0b1,xb1)=1.
枚举 b1b_1b1 的因子,判断是不是 a1a_1a1 的倍数即可。时间复杂度 O(Tb1⋅lgb1)O(T\sqrt{b_1}·\lg b_1)O(Tb1⋅lgb1)。
#include<cstdio>
using namespace std;
int gcd(int a,int b) {
return b==0?a:gcd(b,a%b);
}
int main() {
int T;
scanf("%d",&T);
while(T--) {
int a0,a1,b0,b1;
scanf("%d%d%d%d",&a0,&a1,&b0,&b1);
int p=a0/a1,q=b1/b0,ans=0;
for(int x=1;x*x<=b1;x++)
if(b1%x==0){
if(x%a1==0&&gcd(x/a1,p)==1&&gcd(q,b1/x)==1) ans++;
int y=b1/x;//得到另一个因子
if(x==y) continue;
if(y%a1==0&&gcd(y/a1,p)==1&&gcd(q,b1/y)==1) ans++;
}
printf("%d\n",ans);
}
return 0;
}
[NOIp2009] luogu P1072 Hankson 的趣味题的更多相关文章
- luogu P1072 Hankson的趣味题
题目链接 luogu P1072 Hankson 的趣味题 题解 啊,还是noip的题好做 额,直接推式子就好了 \(gcd(x,a_0)=a_1=gcd(\frac{x}{a_1},\frac{a_ ...
- luogu P1072 $Hankson$ 的趣味题
这里提供两种做法 sol 1 考虑两个数\(A,B\)和\(C=gcd(A,B),D=lcm(A,B)\)的关系 设\(S=\{2,3,5...P_n\}\)为质数集合\(p_{x,i}\)表示\(x ...
- 洛谷 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 ...
- [NOIP2009] 提高组 洛谷P1072 Hankson 的趣味题
题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现 在,刚刚放学回家的 Hankson 正在思考一个有趣的问题. 今天在课堂上,老师讲 ...
- 【Luogu】P1072 Hankson 的趣味题 题解
原题链接 嗯...通过标签我们易得知,这是一道数学题(废话) 其中,题目给了这两个条件: \(gcd(x,a_0)=a_1,lcm(x,b_0)=b_1\) 所以,根据 \(gcd\) 与 \(lcm ...
- 洛谷P1072 Hankson 的趣味题(题解)
https://www.luogu.org/problemnew/show/P1072(题目传送) 数学的推理在编程的体现越来越明显了.(本人嘀咕) 首先,我们知道这两个等式: (a0,x)=a1,[ ...
- 【题解】洛谷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) ( ...
随机推荐
- Winform中自定义xml配置文件,并配置获取文件路径
场景 在Winform程序中,需要将一些配置项存到配置文件中,这时就需要自定义xml的配置文件格式.并在一些工具类中去获取配置文件的路径并加载其内容. 关注公众号霸道的程序猿获取编程相关电子书.教程推 ...
- SpringBoot整合Elasticsearch详细步骤以及代码示例(附源码)
准备工作 环境准备 JAVA版本 java version "1.8.0_121" Java(TM) SE Runtime Environment (build 1.8.0_121 ...
- http响应
1.http响应 2.响应行常见状态码 200 :请求成功. 302 :请求重定向. 当访问网址A时,由于网址A服务器端的拦截器或者其他后端代码处理的原因,会被重定向到网址B. 304 :请求资源没有 ...
- Linux 笔记 - 第九章 Linux 中软件的安装
博客地址:http://www.moonxy.com 一.前言 在 Linux 系统中,应用程序的软件包主要分为两种:1)第一种是二进制的可执行软件包,也就是解开包后就可以直接运行.在 Windows ...
- Failed to access IIS metabase.
framework4.0 可这样 C:\Inetpub\AdminScripts>cd C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\ C:\WIN ...
- Phpstudy被暴存在隐藏后门-检查方法
Phpstudy被暴存在隐藏后门-检查方法 一.事件背景 Phpstudy软件是国内的一款免费的PHP调试环境的程序集成包,通过集成Apache.PHP.MySQL.phpMyAdmin.ZendOp ...
- .NET分布式大规模计算利器-Orleans(一)
写在前面 Orleans是基于Actor模型思想的.NET领域的框架,它提供了一种直接而简单的方法来构建分布式大规模计算应用程序,而无需学习和应用复杂的并发或其他扩展模式.我在2015年下半年开始 ...
- php接受的post数据类型
通常情况下用户使用浏览器网页表单向服务器post提交数据,我们使用PHP的$_POST接收用户POST到服务器的数据,并进行适当的处理.但有些情况下,如用户使用客户端软件向服务端php程序发送post ...
- jvm对象内存分配
一.jvm简单结构图 1.jvm内存对象分配整体流程: 1.类加载子系统和方法区 类加载子系统负责从文件系统或者网络中加载Class信息,加载的类信息存放于一块称为方法区的内存空间.除了类的信息外, ...
- 前台提交数据到node服务器(get方式)
.有两种办法,一种是表单提交,一种是ajax方式提交. 1.form提交 在前台模板文件上写: <form action="/reg" method="get&q ...