UVA - 11388

题意:输入g和l,找到a和b,gcd(a,b)=g,lacm(a,b)=l,a<b且a最小


g不能整除l时无解,否则一定g,l最小

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <cmath>
  6. using namespace std;
  7. typedef long long ll;
  8. inline int read(){
  9. char c=getchar();int x=,f=;
  10. while(c<''||c>''){if(c=='-')f=-;c=getchar();}
  11. while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
  12. return x*f;
  13. }
  14. int T,g,l;
  15. int main(int argc, const char * argv[]){
  16. T=read();
  17. while(T--){
  18. g=read();l=read();
  19. if(l%g) printf("-1\n");
  20. else printf("%d %d\n",g,l);
  21. }
  22. return ;
  23. }

PS:Luogup1029求数量的话可以依据a*b=g*l枚举

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. using namespace std;
  6. typedef long long ll;
  7. inline int read(){
  8. char c=getchar();int x=,f=;
  9. while(c<''||c>''){if(c=='-')f=-;c=getchar();}
  10. while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
  11. return x*f;
  12. }
  13. ll g,l;
  14. int cnt=;
  15. inline int gcd(int a,int b){
  16. return b==?a:gcd(b,a%b);
  17. }
  18. int main(int argc, const char * argv[]) {
  19. g=read();l=read();
  20. ll n=g*l;
  21. for(ll i=g;i<=l;i++){
  22. if(n%i) continue;
  23. ll j=n/i;
  24. if(gcd(i,j)==g) cnt++;
  25. }
  26. printf("%d",cnt);
  27. return ;
  28. }



UVA - 11889

题意:输入A和C,求最小的B使lcm(A,B)=C


用唯一分解定理想

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <cmath>
  6. using namespace std;
  7. typedef long long ll;
  8. inline int read(){
  9. char c=getchar();int x=,f=;
  10. while(c<''||c>''){if(c=='-')f=-;c=getchar();}
  11. while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
  12. return x*f;
  13. }
  14. int a,l,T;
  15. inline int gcd(int a,int b){return b==?a:gcd(b,a%b);}
  16. int main(int argc, const char * argv[]) {
  17. T=read();
  18. while(T--){
  19. a=read();l=read();
  20. if(l%a) printf("NO SOLUTION\n");
  21. else{
  22. int b=l/a,g=gcd(a,b),t=;
  23. while(g!=){
  24. t*=g;
  25. a/=g;
  26. g=gcd(a,b);
  27. }
  28. printf("%d\n",b*t);
  29. }
  30. }
  31. return ;
  32. }



UVA - 10943

题意:k个不超过n的非负整数加起来和为n有几种方案


完全背包

f[i][j]表示i个数加起来和为j

转移可以从O(n)变O(1)

可以是f[i-1][j]+0,也可以是f[i][j-1]+1

  1. f[i][j]=(f[i-1][j]+f[i][j-1])%MOD;
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <cmath>
  6. using namespace std;
  7. const int N=,MOD=1e6;
  8. inline int read(){
  9. char c=getchar();int x=,f=;
  10. while(c<''||c>''){if(c=='-')f=-;c=getchar();}
  11. while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
  12. return x*f;
  13. }
  14. int n,m,f[N][N];
  15. void dp(){
  16. for(int i=;i<=;i++) f[i][]=;
  17. for(int i=;i<=;i++)
  18. for(int j=;j<=;j++)
  19. f[i][j]=(f[i-][j]+f[i][j-])%MOD;
  20. }
  21. int main(int argc, const char * argv[]) {
  22. dp();
  23. while((n=read())){
  24. m=read();
  25. printf("%d\n",f[m][n]);
  26. }
  27.  
  28. return ;
  29. }



UVA - 10791

题意:输入n,求至少两个正整数,使lcm=n


唯一分解定理分解后就是最优解,注意素数

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <cmath>
  6. using namespace std;
  7. typedef long long ll;
  8. inline int read(){
  9. char c=getchar();int x=,f=;
  10. while(c<''||c>''){if(c=='-')f=-;c=getchar();}
  11. while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
  12. return x*f;
  13. }
  14. int n;
  15. ll sol(int n){
  16. if(n==) return ;
  17. int cnt=,m=sqrt(n)+;
  18. ll ans=;
  19. for(int i=;i<=m&&n!=;i++) if(n%i==){
  20. cnt++;
  21. ll d=;
  22. while(n%i==) n/=i,d*=i;
  23. ans+=d;
  24. }
  25. if(n>) cnt++,ans+=n;
  26. if(cnt==) return ans+;
  27. else return ans;
  28. }
  29. int main(int argc, const char * argv[]) {
  30. int cas=;
  31. while(scanf("%d",&n)!=EOF&&n){
  32. printf("Case %d: %lld\n",++cas,sol(n));
  33. }
  34. return ;
  35. }



UVA - 10780

题意: 输入n和m,求最大的k使m^k整除n!


唯一分解定理裸

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <cmath>
  6. using namespace std;
  7. const int N=1e4+;
  8. typedef long long ll;
  9. inline int read(){
  10. char c=getchar();int x=,f=;
  11. while(c<''||c>''){if(c=='-')f=-;c=getchar();}
  12. while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
  13. return x*f;
  14. }
  15. int T,m,n,e1[N],e2[N],p[N],vis[N],cnt=;
  16. void era(int n){
  17. int m=sqrt(n)+;
  18. for(int i=;i<=m;i++) if(!vis[i])
  19. for(int j=i*i;j<=n;j+=i) vis[j]=;
  20. for(int i=;i<=n;i++) if(!vis[i]) p[++cnt]=i;
  21. }
  22. void divide(int n,int e[]){
  23. for(int i=;i<=cnt&&n!=;i++) if(n%p[i]==){
  24. int d=;
  25. while(n%p[i]==) n/=p[i],d++;
  26. e[i]+=d;
  27. }
  28. }
  29. int main(int argc, const char * argv[]){
  30. era();
  31. T=read();int cas=;
  32. while(T--){
  33. printf("Case %d:\n",++cas);
  34. memset(e1,,sizeof(e1));
  35. memset(e2,,sizeof(e2));
  36. m=read();n=read();
  37. divide(m,e1);
  38. for(int i=;i<=n;i++) divide(i,e2);
  39. int flag=,k=,len=max(m,n);
  40. for(int i=;i<=len;i++){//printf("%d %d %d\n",p[i],e1[i],e2[i]);
  41. if(e1[i]>e2[i]){flag=;printf("Impossible to divide\n");break;}
  42. if(e2[i]!=&&e1[i]!=) k=min(k,e2[i]/e1[i]);
  43. }
  44. if(!flag) printf("%d\n",k);
  45. }
  46.  
  47. return ;
  48. }

UVA数学入门训练Round1[6]的更多相关文章

  1. 入门训练 Fibonacci数列

      入门训练 Fibonacci数列   时间限制:1.0s   内存限制:256.0MB 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时, ...

  2. 蓝桥杯 入门训练 Fibonacci数列(水题,斐波那契数列)

    入门训练 Fibonacci数列 时间限制:1.0s   内存限制:256.0MB 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非 ...

  3. 入门训练 A+B问题

    http://lx.lanqiao.org/problemset.page?code=BEGIN-&userid=34549   入门训练 A+B问题   时间限制:1.0s   内存限制:2 ...

  4. 蓝桥杯 入门训练 Fibonacci数列

      入门训练 Fibonacci数列   时间限制:1.0s   内存限制:256.0MB        问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. ...

  5. 【蓝桥杯】入门训练 Fibonacci数列

      入门训练 Fibonacci数列   时间限制:1.0s   内存限制:256.0MB        问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. ...

  6. 入门训练 Fibonacci数列 (水题)

    入门训练 Fibonacci数列   时间限制:1.0s   内存限制:256.0MB        问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n ...

  7. lqb 入门训练 A+B问题

    入门训练 A+B问题 时间限制:1.0s   内存限制:256.0MB     问题描述 输入A.B,输出A+B. 说明:在“问题描述”这部分,会给出试题的意思,以及所要求的目标. 输入格式 输入的第 ...

  8. lqb 入门训练 序列求和 (PS:用长整数做数据的输入输出)

    入门训练 序列求和 时间限制:1.0s   内存限制:256.0MB     问题描述 求1+2+3+...+n的值. 输入格式 输入包括一个整数n. 输出格式 输出一行,包括一个整数,表示1+2+3 ...

  9. lqb 入门训练 圆的面积 (PS: PI的精确计算方法 atan(1.0) * 4)

    入门训练 圆的面积 时间限制:1.0s   内存限制:256.0MB     问题描述 给定圆的半径r,求圆的面积. 输入格式 输入包含一个整数r,表示圆的半径. 输出格式 输出一行,包含一个实数,四 ...

随机推荐

  1. 背水一战 Windows 10 (37) - 控件(弹出类): MessageDialog, ContentDialog

    [源码下载] 背水一战 Windows 10 (37) - 控件(弹出类): MessageDialog, ContentDialog 作者:webabcd 介绍背水一战 Windows 10 之 控 ...

  2. Git合并分支操作

    1. 添加自己的文件 git add .; 2. 缓存自己的文件 git stash; 3. 查看状态 git status; 4. 获取别的分支 git pull origin master(分支名 ...

  3. 疯狂Android讲义 - 学习笔记(八)

    第10章 Service与BroadcastReceiver 10.1 Service简介 Service组件也是可执行的程序,有自己的生命周期,创建.配置Service与创建.配置Activity的 ...

  4. Verilog学习笔记基本语法篇(十二)········ 编译预处理

    h Verilog HDL语言和C语言一样也提供编译预处理的功能.在Verilog中为了和一般的语句相区别,这些预处理语句以符号"`"开头,注意,这个字符位于主键盘的左上角,其对应 ...

  5. 使用MyEclipse 开发struts2框架结构详细教程——以登录为例

    1.首先建立Web Project,名称为:struts2 ,然后选择Java EE6.0,点击Finish. 2.右击“struts”选择MyEclipse->Add Struts Capab ...

  6. Javascript 创建对象方法的总结

    最近看了一下<Javascript高级程序设计(第三版)>,这本书很多人都推荐,我也再次郑重推荐一下.看过之后总得总结一下吧,于是我选了这么一个主题分享给大家. 使用Javascript创 ...

  7. 几款开源的hybird移动app框架分析

    几款开源的Hybrid移动app框架分析 Ionic Onsen UI 与 ionic 相比 jQuery Mobile Mobile Angular UI 结论 很多移动开发者喜欢使用原生代码开发, ...

  8. Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列十七】

    <Web 前端开发精华文章推荐>2013年第五期(总第十七期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...

  9. 使用hexo搭建属于自己的博客

    如果你喜欢拥有自己的博客域名,如果你喜欢折腾,可以先点击luckykun.com,看看效果,再选择要不要进来看看--- 之前一直都在博客园写博客,不过最近在逛园子的时候不小心看到了hexo,简直有种相 ...

  10. jQuery构造函数init参数分析(一)

    在我的上一篇随笔里面分析了jQuery的构造函数,jQuery对象中有一个原型方法init才是是真正的构造函数,通过init的原型对象跟jQuery的原型对象保持引用关系使得init的实例可以正常调用 ...