意外
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. php十行代码将xml转成数组

    <?php header("Content-Type:text/html;charset=utf-8"); function xml2array($filename){ $x ...

  2. Linux,ubuntu14.04.5下安装软件

    没有aptitude 使用:  sudo apt-get install  ***

  3. jpa动态分页查找

    https://my.oschina.net/buwei/blog/172402 http://www.cnblogs.com/derry9005/p/6282571.html http://2560 ...

  4. spark 安装配置

    最佳参考链接 https://opensourceteam.gitbooks.io/bigdata/content/spark/install/spark-160-bin-hadoop26an_zhu ...

  5. error MSB8031

    http://go.microsoft.com/fwlink/p/?LinkId=286820 下载

  6. 了解一下Windows Cracker

    Windows Cracker 消息拆析宏 可以为消息进行参数分解 无需记住或查阅资料来了解WParam和lParam的意义 可以忘记旧的消息处理方式:switch/case 不适合于大型复杂的需要处 ...

  7. JavaScript第五天之数组

    <script> var a=[1,2,3]; //var a=new Array(1,2,3); //alert(a.length); alert(a[0]); </script& ...

  8. linux vi编辑器中,如何通过快捷键上下翻页?

    需求说明: 之前在vi的时候,如果想看下一页,就直接按住 ↓ 这个箭头一直翻,现在觉得有些麻烦, 就找了下上,下翻页的快捷方式.在此记录下. 记录: 1.向下翻页快捷键(下一页):Ctrl + f 2 ...

  9. Storm-源码分析-Streaming Grouping (backtype.storm.daemon.executor)

    executor在发送outbounding message的时候, 需要决定发送到next component的哪些tasks 这里就需要用到streaming grouping,   1. mk- ...

  10. UE4修改自Rama的UDP通信蓝图插件

    UE4.15没有提供蓝图UDP的组件,可以在网上找到一个ID叫Rama写的源代码,我把它封装成插件了(MyUdpPlugin),方便在各个UE4版本工程中使用UDP通信. 使用方式: 1.在自己的工程 ...