ACM-ICPC Jiaozuo Onsite 2018 E Resistors in Parallel /*JAVA大数&&神仙规律题 ( 数学真神奇 :( )*/
真神仙规律题。(日常不懂题意)
首先我发现了每一个极值m都是1*2*3*5*7...(也就是素数积),问题就转换为m的因子的倒数和为多少。然后就。。没然后了。。。
其实需要打表(dfs吧?)。
前几个极值m的因子的倒数和的倒数为 1 , 2/3 ,6/12 ,30/72 ,210/576
规律就很明显了。
也是和素数也关系,分子累乘素数,分母累乘素数+1。
然后java。
出题人是真的神仙中神仙。
package jt;
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner (System.in);
boolean vis[]=new boolean[100005];
int zhi[]=new int[100000];
for(int i=0;i<=100000;i++) vis[i]=true;
int p=0;zhi[p]=1;
for(int i=2;i<=100000;i++) {
if(vis[i]==false) continue;
zhi[++p]=i;
if(i<100)
for(int j=i*2;j<=100000;j=j+i) {
vis[j]=false;
}
}
int T;
T=sc.nextInt();
String ss=sc.nextLine();
while(T-->0) {
String s;
s=sc.nextLine();
BigInteger n=new BigInteger(s);
BigInteger x=new BigInteger("1");
BigInteger xx=new BigInteger("1");
for(int i=1;;i++) {
if(x.compareTo(n)>0) {
p=i-1;
break;
}
x=x.multiply(BigInteger.valueOf(zhi[i]));
xx=xx.multiply(BigInteger.valueOf(zhi[i]+1));
}
x=x.divide(BigInteger.valueOf(zhi[p]));
xx=xx.divide(BigInteger.valueOf(zhi[p]+1));
BigInteger gc=x.gcd(xx);
x=x.divide(gc);
xx=xx.divide(gc);
System.out.println(x+"/"+xx);
}
}
}