ACM刷题之HDU————相遇周期(真·打表(素数筛选))
2016-04-07 17:40
302 查看
相遇周期 |
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) |
Total Submission(s): 3136 Accepted Submission(s): 1465 |
Problem Description 2007年3月26日,在中俄两国元首的见证下,中国国家航天局局长孙来燕与俄罗斯联邦航天局局长别尔米诺夫共同签署了《中国国家航天局和俄罗斯联邦航天局关于联合探测火星-火卫一合作的协议》,确定中俄双方将于2009年联合对火星及其卫星“火卫一”进行探测。 而卫星是进行这些探测的重要工具,我们的问题是已知两颗卫星的运行周期,求它们的相遇周期。 |
Input 输入数据的第一行为一个正整数T, 表示测试数据的组数. 然后是T组测试数据. 每组测试数据包含两组正整数,用空格隔开。每组包含两个正整数,表示转n圈需要的天数(26501/6335,表示转26501圈要6335天),用\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'隔开。 |
Output 对于每组测试数据, 输出它们的相遇周期,如果相遇周期是整数则用整数表示,否则用最简分数表示。 |
Sample Input2 26501/6335 18468/42 29359/11479 15725/19170 |
Sample Output81570078/7 5431415 关于分数的最小公倍数算法是:先通分,然后求出分子的最小公倍数,然后最小公倍数除以通分后的分母就是答案了(最后别忘化简) 没错这题的思路就是这么简单,但是分数的化简有点麻烦。 下面是ac代码 #include<stdio.h> __int64 p[20000]={0}; __int64 a[20000]={0}; int main() { __int64 zu,zi1,zi2,mu1,mu2,zi,mu,m,i,c,num; __int64 h,k=0; //素数表 for(i=1;i<20000;i++) a[i]=i+1; for(i=0;i<20000;i++) if(a[i]!=0) { p[k]=a[i]; for(h=i;h<20000;h++) if(a[h]%p[k]==0) a[h]=0; k++; } //////////////////// scanf("%d",&zu); while(zu--) { scanf("%I64d/%I64d %I64d/%I64d",&zi1,&mu1,&zi2,&mu2); zi1=zi1*mu2; zi2=zi2*mu1; mu=mu1*mu2; //求 公倍数 i=zi1*zi2; if(zi1<zi2){ c=zi1; zi1=zi2; zi2=c; } while(zi1%zi2!=0){ c=(zi1%zi2); zi1=zi2; zi2=c; } zi=i/zi2; if(zi%mu==0) { printf("%I64d\n",zi/mu); continue; } else { for(i=0;i<2000;) { if(zi%p[i]==0&&mu%p[i]==0) { zi/=p[i]; mu/=p[i]; continue; } i++; } printf("%I64d/%I64d\n",zi,mu); } } } 化简分子分母,其实就是除以一个同时能除的数。这个数就是素数(其中的原理百度下吧。。我也是猜的) 所以要很多的素数一个个试过来才行。 这里就要用到打表了。 打表的 #include<stdio.h> __int64 p[20000]={0}; __int64 a[20000]={0}; int main() { __int64 i; __int64 h,k=0; //素数表 for(i=1;i<20000;i++) a[i]=i+1; for(i=0;i<20000;i++) if(a[i]!=0) p[k]=a[i]; for(h=i;h<20000;h++) if(a[h]%p[k]==0) a[h]=0; k++; } }一层一层去掉无用数据,就是方法。 |
相关文章推荐
- 5.2016 物电学院 电气工程及其自动化专业 辛雅松 15050341033
- 字符输入流Reader简要概括
- C语言-字节对齐
- Linux下添加FTP账号和服务器、增加密码和用户,更改FTP目录(转)
- 理解java线程的中断(interrupt)
- 【bzoj 1458】士兵占领(最大流)
- OA中BaseDao抽象设计思路梳理
- java并发编程-Executor框架
- 随机10个数和 五
- 《软件架构设计》学习笔记--9--6大步骤5:细化架构设计
- 手机来电去电状态分析
- oracle dbms_logmnr
- spring4.1.6配置quartz2.2.1(maven)
- 任意10个数求和方法5
- Android开发学习总结(二)——使用Android Studio搭建Android集成开发环境
- Zhejiang University----A+B for Matrices
- Lua学习笔记-9.4章-非抢占式的多线程
- JavaCPP 技术使用经验总结
- 自定义适配器
- 防火墙的局限与入侵检测系统的特征