SWUN 1428 - 行星球体
来源:互联网 发布:电脑锁屏软件 编辑:程序博客网 时间:2024/04/28 13:38
行星连珠
总提交 : 57 测试通过 : 5
描述
通常用肉眼望去,当行星差不多处在一条直线上时,人们就称之为“行星连珠”。
n星连珠是指太阳系的n颗行星在同一时间位于同一条直线。
已知这n颗行星都是以太阳为圆心,做匀速圆周运动,且第i颗行星的公转周期为ti天(即绕圆周飞行一圈的时间)。
现在,Snow_storm想知道n星连珠每次出现的最少间隔时间是多少?
输入
输入的第一行为正整数T(T<=300),表示测试组数。
对于每组测试数据,有一个正整数n(2<=n<=10000),表示有n颗行星
接下来的一行,共有n个正整数ti(1<=ti<=10000),其中第i个数表示第i颗行星的公转周期。
输出
对于每组测试数据,输出最少的间隔时间。
样例输入
3
3
5 6 7
4
2 4 6 8
4
5 6 30 60
样例输出
Case 1: 210
Case 2: 24
Case 3: 60
题目来源
YB
题目地址: http://218.194.91.48/acmhome/problemdetail.do?&method=showdetail&id=1428
刚看到这题,很容易知道,就是求所有数的最小公倍数,但是乘积很大。
于是兴奋的写起JAVA大整数~~~
N久没写,有点手生。
敲完,提交,RE在第5组。
查了N久,怀疑数据中含0,除0了。。。 讨论版提问,果然~~
重判时,N范围从1000改到了10000。。。
(数据范围为1000时,我的JAVA代码应该是能AC的~~~ 囧~ 据出题人说:题目数据出水了,范围写错了~~ 各种囧)
秉着考方法(思路)不考运气的想法,出题人让我的代码华丽的TLE了~~~(写的方法不对~)
仔细想下,改用c++敲(比JAVA敲的顺手。。。)。。。
思路很简单,先枚举100以内的所有素数(10000开方后是100,所以10000以内的合数肯定有含有100以内的因素。不含有时,该数为质数)。。。
然后记录每个素数在所有数中出现了几次。。。
重复出现则除去(即除去共同因子)。。。
然后用大数乘法储存结果··· (当然这样还TLE了一次,囧,后来特判了一下,当新乘入的数为1时,则不进行大数乘法)。。。
算是擦边AC了吧? 虽然数据确实很残暴。。。
后来把JAVA代码也改过了~~~~
=========================================================================================================
C++代码:
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;struct BigInt{int len,num[40000];BigInt(){}BigInt(int x){ len=1;num[0]=x;}void mul(int x){int i;for(i=0;i<len;i++)num[i]*=x;for(i=0;i<len-1;i++)if(num[i]>=100000){num[i+1]+=num[i]/100000;num[i]%=100000;}if(num[len-1]>=100000){num[len]=num[len-1]/100000;num[len-1]%=100000;len++;}}void print(){printf("%d",num[--len]);while(len--)printf("%05d",num[len]);puts("");}};int prime[11000];int rec[110],cnt;int gcd(int x){int i,j,k,num,res,m;res=1;for(i=0;i<cnt&& x>=rec[i];i++){num=0;while(x%rec[i]==0){num++;x/=rec[i];}if(num>0){if(num<=prime[rec[i]]) continue;else{m=num-prime[rec[i]];prime[rec[i]]=num;while(m--)res*=rec[i];}}}if(x && prime[x]==0){res*=x;prime[x]=1;}return res;}int init_(){memset(prime,0,sizeof(prime));int i,j;cnt=0;for(i=2;i<=100;i++){if(prime[i]) continue;for(j=i+i;j<=100;j+=i)prime[j]=1;rec[cnt++]=i;}}int init_1(){memset(prime,0,sizeof(prime));}int a[11000];int cmp(int x,int y){return x>y;}int main(){int t,tt,n,i,tmp;BigInt res;scanf("%d",&t);init_();for(tt=1;tt<=t;tt++){init_1();scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&a[i]); sort(a,a+n,cmp);res=BigInt(a[0]);gcd(a[0]);for(i=1;i<n;i++){tmp=gcd(a[i]);if(tmp==1) continue;res.mul(tmp);}printf("Case %d: ",tt);res.print();}return 0;}
============================================================================================================
JAVA代码:
import java.util.*;import java.math.*;public class Main{static int[] prime = new int[11000];static int[] rec = new int[110];static int cnt;static int gcd(int x){int i,j,k,num,res,m;res=1;for(i=0;i<cnt && x>=rec[i];i++){num=0;while((x%rec[i])==0){num++;x/=rec[i];}if(num>0){if(num<=prime[rec[i]]) continue;else{m=num-prime[rec[i]];prime[rec[i]]=num;while(m>0){m--;res*=rec[i];}}}}if(x>1 && prime[x]==0){res*=x;prime[x]=1;}return res;}static void init_(){int i,j;for(i=0;i<=100;i++)prime[i]=0;cnt=0;for(i=2;i<=100;i++){if(prime[i]==1) continue;for(j=i+i;j<=100;j+=i)prime[j]=1;rec[cnt++]=i;}}public static void main(String args[]){Scanner cin = new Scanner(System.in);int t,tt,n,j,i,tmp,m;BigInteger res,now;t = cin.nextInt();init_();for(tt=1;tt<=t;tt++){for(j=0;j<=10000;j++) prime[j]=0;n=cin.nextInt();tmp=cin.nextInt();res=BigInteger.valueOf(tmp);gcd(tmp);for(i=1;i<n;i++){tmp=cin.nextInt();m=gcd(tmp);if(m==1) continue;res=res.multiply(BigInteger.valueOf(m));}System.out.println("Case "+ tt + ": "+ res);}}}
- SWUN 1428 - 行星球体
- SWUN 才艺
- SWUN CD8
- SWUN Card
- SWUN 调戏
- swun 项链
- SWUN 1763
- SWUN 1165 - 司马称好
- SWUN 1150 - 财务报表
- SWUN 1012 - Card
- SWUN 1303 - 魔法学徒
- SWUN 1066 - 电话线
- SWUN 1075 - CD8
- SWUN 狼人杀
- SWUN 永不言败
- swun 休想逃跑
- SWUN 1433 - Count
- SWUN 1454 - Hotel booking
- 工作纠结,到底去哪家公司?北控三兴or神州普惠
- 关于Java语言中的线程安全问题
- 如何检测iOS里安装的其它软件?
- Training2:位操作训练 (以前发的那个有个BUG,没注意,对不起大家了,所以重发)
- 数据库常见的三种join方式
- SWUN 1428 - 行星球体
- Redhat Enterprise Linux 6.3 下安装jdk1.6.0_30
- QListWidget
- Print Screen sysRa PrtSc
- java反射机制调用
- QListView 類別
- ubuntu下locale-gen的使用
- C++虚函数的实现
- Redhat Enterprise Linux 6.3 下安装tomcat