2154: 单身狗线下聚会
题目描述 马上就到七夕节了,单身狗们决定聚一聚。但是它们沉迷B站上的lo娘,他们每沉迷 ai 单身狗时间(这是它们专业计时)后就会休息 1 单身狗时间。它们想找到一个时间正好他们都在休息,然后聚在一起单身。但是,每一只单身都因为缺爱,所以非常讨厌52这个数字(它们非常喜欢12),所以它们最多沉迷51个单身狗时间。 单身狗们发现每过一段相同的单身狗时间 S ,它们就一定会全部聚在一起。 单身狗们想把这个作为加入单身狗聚会的考核,算不出来时间的单身狗就得加入它们。当然,作为一个要在遥远的未来找到对象的有理想单身狗,怎么能加入这个咸鱼的单身狗群呢!现在请算一算这个时间,让这群单身狗看看你的与众不同。 输入 输入一个整数T开始,表示测试用例的数量。 每一行先输入一个整数n,(表示聚会中有 n 只单身狗)(1<=n<=10000),下一行将输入由空格分隔的n个整数ai(1<=ai<52)。 输出 一个最小的单身狗时间 S 。 样例输入 2 2 1 2 4 1 2 5 7 样例输出 6 24
大致思路:
求N个数的最大公倍数,C的话大数模拟乘法就好,但记得先把公因数除去一次!
例如:2/4/8,2/6/8,2/8/10, 自行模拟求一下他们的最大公倍数,最后得出规律!!
关于超longlong的判断,该题正好最大的ai<=50时,不超过unsigned longlong, 其余的情况下都是会超数据范围的!或者自己输入51个不同的数字试试!
也可以hash一下处理,毕竟数字和数字重复后,仅算一个数字处理!
1 import java.math.*; 2 import java.util.*; 3 4 public class Main { 5 6 public static int Gcd(int a,int b){ 7 return b!=0?Gcd(b,a%b):a; 8 } 9 public static void main(String[] args) { 10 // TODO Auto-generated method stub 11 Scanner cin=new Scanner(System.in); 12 13 int T=cin.nextInt(); 14 15 while(T-->0){ 16 int arr[]=new int[10008]; 17 int n=cin.nextInt(); 18 int x; 19 for(int i=1;i<=n;i++){ 20 x=cin.nextInt(); 21 arr[i]=x+1; 22 } 23 for(int i=1;i<=n;i++){ //双重循环除掉一次因子 24 for(int j=i+1;j<=n;j++){ 25 int num = Gcd(arr[i],arr[j]); 26 arr[j]/=num; 27 } 28 } 29 30 BigInteger sum=new BigInteger("1"); 31 32 for(int i=1;i<=n;i++){ 33 sum=sum.multiply(BigInteger.valueOf(arr[i])); 34 } 35 System.out.println(sum); 36 } 37 38 } 39 40 } 41 42 /************************************************************** 43 Problem: 2154 44 User: 137666 45 Language: Java 46 Result: 正确 47 Time:180 ms 48 Memory:20652 kb 49 ****************************************************************/