意外
Time Limit: 1000 MS Memory Limit: 65536 K
Total Submit: 326(87 users) Total Accepted: 97(63 users) Rating:  Special Judge: No
Description

静竹以为从此过上了幸福的日子,没想到数学的好友欧几里德心存不满总是暗中使坏!有一天,欧几里德在静竹经常与数学相见的地方放了一条毒蛇,一不小心静竹就中毒了。还有人性的是,欧几里德把解药放到了一个密码箱里,但是密码呢必须通过箱子上面的两个数来计算出,数学能够把静竹成功解救吗?

Input

输入数据包含两个整数x, y(2 <= x <= 1 0,000,000, 2 <= y <= 100,000,000),

处理到文件结束

Output

对于每组输入的x,y输出一个整数表示密码并换行

密码是由p+q的和组成,其中p,q满足

1) p q都是正整数

2) GCD(p, q) = x;

3) LCM(p, q) = y.

由于存在多组解,输出p+q和最小的那种情况即可。

如果p, q不存在,输出Vagaa

Sample Input
3 15

23 45
Sample Output
18

Vagaa

解题思路:

p*q=gcd(p,q)*lcm(p,q)=y*x;

那p,q的范围是在x到sqrt(y*x)之间的,遍历一遍就好了。

但是,就这么水过去,感觉没什么收获。用一点数论的知识吧~

p=a*x,q=b*x;这是肯定的,都知道的。

p*q=(a*b)*x*x;

p*q=y*x=(a*b)*x*x;

y/x=a*b;

a,b是互质的。关键就要找出a和b

对y/x分解质因子,分解质因子每个质因子都质数。我们应该分解因数。然后暴力搜索一遍

#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <math.h>
#include <stdio.h> using namespace std;
typedef long long int LL;
LL prime[20005];
LL sprime[20005];
int mark[20005];
int tot;
int cnt;
LL x,y;
LL ans;
void eular()
{
memset(mark,0,sizeof(mark));
tot=0;
for(int i=2;i<=20000;i++)
{
if(!mark[i]) prime[tot++]=i;
for(int j=0;j<tot;j++)
{
if(i*prime[j]>20000) break;
mark[i*prime[j]]=1;
if(i%prime[j]==0)
break;
}
}
}
void Divide(LL n)
{
cnt=0;
LL t=(LL)sqrt(1.0*n);
for(LL i=0;i<tot&&prime[i]<=t;i++)
{
if(n%prime[i]==0)
{
sprime[++cnt]=1;
while(n%prime[i]==0)
{
n/=prime[i];
sprime[cnt]*=prime[i];
}
}
}
if(n>1)
sprime[++cnt]=n;
}
void fun(int x,LL l,LL r)
{
if(x>cnt)
{
//if(l==r) return;
ans=min(ans,l+r);
return;
}
fun(x+1,l*sprime[x],r);
fun(x+1,l,r*sprime[x]);
}
int main()
{
while( scanf("%lld%lld",&x,&y)!=EOF)
{
eular();
if(y%x!=0)
{
printf("Vagaa\n");
continue;
} Divide(y/x);
ans=1e18;
fun(1,1,1);
printf("%lld\n",ans*x);
}
return 0;
}

HRBUST - 1153 意外 HRBUST - 1153 (数论)的更多相关文章

  1. hrbust 1328 相等的最小公倍数(数论)

    Description 定义An为1,2,-,n的最小公倍数,例如,A1 = 1,A2 = 2,A3 = 6,A4 = 12,A5 = 60,A6 = 60. 请你判断对于给出的任意整数n,An是否等 ...

  2. centos mysql 大量数据导入时1153 错误:1153 - Got a packet bigger than 'max_allowed_packet' bytes

    参考:http://stackoverflow.com/questions/93128/mysql-error-1153-got-a-packet-bigger-than-max-allowed-pa ...

  3. js鲸鱼

    <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  4. ssh隧道使用

    在内网中几乎所有的linux服务器和网络设备都支持ssh协议.一般情况下,ssh协议是允许通过防火墙和边界设备的,所以经常被攻击者利用.同时ssh协议的传输过程是加密的,所以我们很难区分合法的ssh会 ...

  5. HRBUST 1211 火车上的人数【数论解方程/模拟之枚举+递推】

    火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上.下车,但上.下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人.从第3站起(包括第3站 ...

  6. ural 1153. Supercomputer

    1153. Supercomputer Time limit: 2.0 secondMemory limit: 64 MB To check the speed of JCN Corporation ...

  7. FJNU 1153 Fat Brother And XOR(胖哥与异或)

    FJNU 1153 Fat Brother And XOR(胖哥与异或) Time Limit: 1000MS   Memory Limit: 257792K [Description] [题目描述] ...

  8. Navicat导入数据时发生了报错 --- 1153 - Got a packet bigger than 'max_allowed的处理办法

    今天我在使用Navicat导入.sql文件数据时,发现本来是80万条的数据,结果只导入了10万条左右,而且在其错误信息日志中,我发现了这样一条错误:1153 - Got a packet bigger ...

  9. Navicat 导入数据报错 --- 1153 - Got a packet bigger than 'max_allowed_packet' bytes

    在用Navicat导入SQL文件时报错:MySql 错误 Err [Imp] 1153 - Got a packet bigger than 'max_allowed_packet' bytes 查了 ...

随机推荐

  1. 【转】【Java/Android】Toast使用方法大全

    Toast 是一个 View 视图,快速的为用户显示少量的信息. Toast 在应用程序上浮动显示信息给用户,它永远不会获得焦点,不影响用户的输入等操作,主要用于 一些帮助 / 提示.Toast 最常 ...

  2. Spring-DispatcherServlet说明

    使用spring MVC,配置DispatcherServlet是第一步. DispatcherServlet是一个Servlet,所以可以配置多个DispatcherServlet. Dispatc ...

  3. c++ 在线编译

    #include <algorithm> #include <cstdlib> #include <fstream> #include <iostream&g ...

  4. c++ 用构造函数

    1.c++ 用构造函数创建一个对象时,对象里的属性应该是全新的不存在把之前的属性留下的问题.之所以debug里会存在上一个变量的信息,应该是debug里的一个bug,与程序无光.

  5. 详细分析css float 属性以及position:absolute 的区别

    1.float 属性定义元素在哪个方向浮动.以往这个属性总应用于图像,使文本围绕在图像周围,不过在 CSS 中,任何元素都可以浮动.浮动元素会生成一个块级框,而不论它本身是何种元素.div一个典型的块 ...

  6. Docker 集群管理

    docker systemd unit file [Unit] Description=Docker Application Container Engine Documentation=http:/ ...

  7. Cookie示例

    //caozuocookie        var webusername = "";        function getCookie(name){ var arr,reg=n ...

  8. 机器学习技法之Aggregation方法总结:Blending、Learning(Bagging、AdaBoost、Decision Tree)及其aggregation of aggregation

    本文主要基于台大林轩田老师的机器学习技法课程中关于使用融合(aggregation)方法获得更好性能的g的一个总结.包含从静态的融合方法blending(已经有了一堆的g,通过uniform:voti ...

  9. C语言分支结构之if else语句

    前面我们看到的代码都是顺序执行的,也就是先执行第一条语句,然后是第二条.第三条……一直到最后一条语句,这称为顺序结构. 但是对于很多情况,顺序结构的代码是远远不够的,比如一个程序限制了只能成年人使用, ...

  10. 《C++ Primer Plus》10.3 类的构造函数和析构函数 学习笔记

    10.3.1 声明和定义构造函数构造函数原型:// constructor prototype with some default argumentsStock(const string &c ...