HRBUST - 1153 意外 HRBUST - 1153 (数论)
2017-03-18 18:51
274 查看
意外 | ||||||
| ||||||
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 (数论)
- HRBUST1153-意外
- hrbust 1328 相等的最小公倍数(数论)
- Hrbust 1744 Pascal's Triangle【数论求C(n,m)】
- hrbust 1178 分数加减(模拟+数论gcd,lcm)
- Hrbust 1688 数论中的异或【思维+数论异或】好题~
- hrbust 1328 相等的最小公倍数(数论)
- Hdu4952 - Number Transformation - 数论(2014 Multi-University Training Contest 8)
- Hrbust 1143 (bfs)
- poj 1142 Smith Numbers(数论:欧拉函数变形)
- 关于数论的整理
- poj 3090 Visible Lattice Points(数论:筛法打表欧拉函数)
- 【bzoj4002】[JLOI2015]有意义的字符串 数论+矩阵乘法
- fatal error C1010: 在查找预编译头时遇到意外的文件结尾 (转)
- 数论简单题pat光棍
- HDU1058 Humble Numbers 【数论】
- 括号匹配问题1153
- tyvj 1153 间谍网络 tarjan有向图强连通
- bzoj 1192: [HNOI2006]鬼谷子的钱袋 (数论)
- [NWPU][2014][TRN][21]数论入门 B - 扩展欧几里得 POJ 1061