题意:给定A与B,要求构造出一组X,Y,使得X+Y=A,lcm(X,Y)=B

A<=2e4,B<=1e9

思路:A的范围较小,考虑以A为突破口

枚举A的约数k,复杂度O(sqrt(A))

设X=pk,y=qk,p与q互质

原方程转化:

(p+q)k=a     ——>p+q=a/k

pqk=b   ——>pq=b/k

p,q即为方程x^2-a/k*x+b/k=0的一组正整数解

解得p,q后X=pk,y=qk

 #include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<vector>
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef vector<int> VI;
#define fi first
#define se second
#define MP make_pair
#define N 2100000
#define MOD 1000000007
#define eps 1e-8
#define pi acos(-1) ll A,B,s1,s2; int read()
{
int v=,f=;
char c=getchar();
while(c<||<c) {if(c=='-') f=-; c=getchar();}
while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
return v*f;
} ll gcd(ll x,ll y)
{
if(y==) return x;
return gcd(y,x%y);
} int isok(ll k)
{
if(A%k) return ;
if(B%k) return ;
ll a=;
ll b=-A/k;
ll c=B/k;
ll x=b*b-a*c*;
if(x<) return ;
ll delta=(long long int)(sqrt(x)+eps);
//printf("%lld %lld %lld %lld %lld %lld\n",a,b,c,x,delta,k);
if(delta*delta!=x) return ;
ll t=-b+delta;
if(t%(a*)) return ;
ll x1=t/(a*)*k;
t=-b-delta;
if(t%(a*)) return ;
ll x2=t/(a*)*k;
//printf("%lld %lld\n",x1,x2);
if(x1&&x2&&gcd(x1,x2)==k)
{
if(x1>x2) swap(x1,x2);
s1=x1;
s2=x2;
return ;
}
return ;
} int main()
{
//freopen("D.in","r",stdin);
//freopen("D.out","w",stdout);
while(scanf("%I64d%I64d",&A,&B)!=EOF)
{
s1=s2=;
for(ll i=;i<=sqrt(A+eps);i++)
if(A%i==)
{
if(isok(i)) break;
if(isok(A/i)) break;
}
//printf("%I64d %I64d\n",s1,s2);
if(s1+s2==) printf("No Solution\n");
else
{
if(s1>s2) swap(s1,s2);
printf("%I64d %I64d\n",s1,s2);
} } }

【HDOJ5974】A Simple Math Problem(构造,解方程)的更多相关文章

  1. hdu 1757 A Simple Math Problem (构造矩阵解决递推式问题)

    题意:有一个递推式f(x) 当 x < 10    f(x) = x.当 x >= 10  f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + ...

  2. HDU 1757 A Simple Math Problem 【矩阵经典7 构造矩阵递推式】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=1757 A Simple Math Problem Time Limit: 3000/1000 MS (J ...

  3. HDU1757-A Simple Math Problem,矩阵快速幂,构造矩阵水过

    A Simple Math Problem 一个矩阵快速幂水题,关键在于如何构造矩阵.做过一些很裸的矩阵快速幂,比如斐波那契的变形,这个题就类似那种构造.比赛的时候手残把矩阵相乘的一个j写成了i,调试 ...

  4. hdu 1757 A Simple Math Problem (乘法矩阵)

    A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  5. A Simple Math Problem(矩阵快速幂)(寒假闭关第一题,有点曲折啊)

    A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...

  6. HDU 1757 A Simple Math Problem (矩阵快速幂)

    题目 A Simple Math Problem 解析 矩阵快速幂模板题 构造矩阵 \[\begin{bmatrix}a_0&a_1&a_2&a_3&a_4&a ...

  7. HDU1757 A Simple Math Problem 矩阵快速幂

    A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  8. hdu------(1757)A Simple Math Problem(简单矩阵快速幂)

    A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  9. FZYZ-2071 A Simple Math Problem IX

    P2071 -- A Simple Math Problem IX 时间限制:1000MS      内存限制:262144KB 状态:Accepted      标签:    数学问题-博弈论    ...

  10. HDU 1757 A Simple Math Problem(矩阵)

    A Simple Math Problem [题目链接]A Simple Math Problem [题目类型]矩阵快速幂 &题解: 这是一个模板题,也算是入门了吧. 推荐一个博客:点这里 跟 ...

随机推荐

  1. django 数据库中中文转化为韩语拼音

    1.安装模块 django-uuslug pip install django-uuslug 2.导入模块 from uuslug import slugify 3.使用模块 slugify('天龙八 ...

  2. 在ASP.NET项目中的web.config文件里配置数据库连接并在程序代码中获取连接字符串

      1.在<connectionStrings> 标签里添加连接 <connectionStrings> <add name="ConnectionName&q ...

  3. 利用SignalR实现实时聊天

    2018/10/10:博主第一次写原创博文而且还是关于C#的(博主是从前端转过来的),菜鸟一枚,如果有什么写的不对,理解错误,还望各位轻喷.,从SignalR开始! 首先先介绍一下关于SignalR的 ...

  4. Java中的==和equals的区别详解

    1.基础知识 (1)String x = "hello"; (2)String x = new String ("hello"); 第1种方式的工作机制是,首先 ...

  5. Golang ioutil读写文件测试

    运用 ioutil.ReadFile .ioutil.WriteFile package main import ( "io/ioutil" "log" &qu ...

  6. 【android】【转发】Android中PX、DP、SP的区别

    转载 http://blog.csdn.net/donkor_/article/details/77680042 前言: 众所周知,Android厂商非常多,各种尺寸的android手机.平板层出不穷 ...

  7. LeetCode(149) Max Points on a Line

    题目 Given n points on a 2D plane, find the maximum number of points that lie on the same straight lin ...

  8. The 2018 ACM-ICPC Chinese Collegiate Programming Contest Take Your Seat

    /* 证明过程如下 :第一种情况:按1到n的顺序上飞机,1会随意选一个,剩下的上去时若与自己序号相同的座位空就坐下去,若被占了就也会随意选一个.求最后一个人坐在应坐位置的概率 */ #include ...

  9. Win7里IIS7部署WebService

    最近忙于一个Web的Bug修正,是先人写的一个东东,架构很简单,一个前端的项目,一个WebService的项目,以及后台的一些dll.之前一直很排斥这个产品,因为它没法启动,印象中没有跑得起来过的时候 ...

  10. Java技术——多态的实现原理

    .方法表与方法调用 如有类定义 Person, Girl, Boy class Person { public String toString(){ return "I'm a person ...