2018 ICPC 焦作区域赛 Resistors in Parallel(找规律+大数)
传送门
题目大意
给出电阻的并联公式,规定一个含有平方因子的数的1R=0\frac{1}{R}=0R1=0。定义一个数的阻值为其所有的因子阻值并联求出的结果,问nnn以内并联后的最大的阻值是多少,输出分数形式
解题思路
打表不难知道在很大一段范围内答案是不变的,这体现在前几个数为1,2,6,30,210,2310...1,2,6,30,210,2310...1,2,6,30,210,2310...,不难发现恰好是1,1∗2,1∗2∗3,1∗2∗3∗5,1∗2∗3∗5∗7,1∗2∗3∗5∗7∗11...1,1*2,1*2*3,1*2*3*5,1*2*3*5*7,1*2*3*5*7*11...1,1∗2,1∗2∗3,1∗2∗3∗5,1∗2∗3∗5∗7,1∗2∗3∗5∗7∗11...
但是这个时候如何去找规律呢,我曾尝试质因数分解,然后递推去求,但是这样最后的因子个数会达到21002^{100}2100个,明显爆了。后来也想不出什么,去搜了题解,结果竟然是找了积性函数的规律。
设f(x)f(x)f(x)为xxx的因子并联的阻值,显然f(p)=11+1p=pp+1f(p)=\frac{1}{1+\frac{1}{p}}=\frac{p}{p+1}f(p)=1+p11=p+1p,而f(p1p2)=11+1p1+1p1p2+1p2=p1p2p1+2p1p2+p2=f(p1)f(p2)f(p_1p_2)=\frac{1}{1+\frac{1}{p_1}+\frac{1}{p_1p_2}+\frac{1}{p_2}}=\frac{p_1p_2}{p_1+2p_1p_2+p_2}=f(p_1)f(p_2)f(p1p2)=1+p11+p1p21+p211=p1+2p1p2+p2p1p2=f(p1)f(p2)
使用Java大数,那么这样就能愉快的预处理了!
import java.math.BigInteger;
import java.util.*;public class Main {static long prime[] = new long[1005];static boolean vis[] = new boolean[1005];static BigInteger fz[] = new BigInteger[1005], fm[] = new BigInteger[1005];static BigInteger array[] = new BigInteger[1005];static int cnt, T, tot;static void getPrime() {for (int i = 0; i < 1005; i++) vis[i] = false;vis[1] = false;cnt = 0;for (int i = 2; i < 1005; i++) {if (!vis[i]) {prime[++cnt] = i;}for (int j = 1; j <= cnt && i * prime[j] < 1005; j++) {vis[(int) (i * prime[j])] = true;if (i % prime[j] == 0) break;}}}static void init() {BigInteger Max = BigInteger.ONE;for (int i = 1; i <= 100; i++) {Max = Max.multiply(BigInteger.TEN);}BigInteger res = BigInteger.ONE;fz[0] = BigInteger.ONE;fm[0] = BigInteger.ONE;array[0] = BigInteger.ZERO;for (int i = 1; i <= cnt; i++) {res = res.multiply(BigInteger.valueOf(prime[i]));//System.out.println(res);array[i] = res;if (res.compareTo(Max) > 0) {break;}fm[i] = fm[i - 1].multiply(BigInteger.valueOf(prime[i]).add(BigInteger.ONE));fz[i] = fz[i - 1].multiply(BigInteger.valueOf(prime[i]));//System.out.println(fz[i] + "/" + fm[i]);BigInteger gcd = fz[i].gcd(fm[i]);fz[i] = fz[i].divide(gcd);fm[i] = fm[i].divide(gcd);}}public static void main(String[] args) {getPrime();init();BigInteger n;Scanner scanner = new Scanner(System.in);T = scanner.nextInt();while ((T--) != 0) {n = scanner.nextBigInteger();if (n.compareTo(BigInteger.ONE) == 0) {System.out.println("1/1");continue;}int idx = 0;for (int i = 1; ; i++) {if (n.compareTo(array[i]) == 0) {idx = i;break;}if (n.compareTo(array[i - 1]) > 0 && n.compareTo(array[i]) < 0) {idx = i - 1;break;}}if (fz[idx] == fm[idx]) {System.out.println("1/1");} else System.out.println(fz[idx] + "/" + fm[idx]);}}
}
2018 ICPC 焦作区域赛 Resistors in Parallel(找规律+大数)相关推荐
- 【2018焦作-E】Resistors in Parallel(思维+大数)
题目链接 思路: 思考一下会发现选择质因子越多的且越小的会使得结果更小,因此预处理前100的质因子,询问直接查询处理数组.需要写大数 ac代码: import java.util.Scanner; i ...
- Gym - 101981G The 2018 ICPC Asia Nanjing Regional Contest G.Pyramid 找规律
数一个n阶三角形中,有多少个全等三角形,n<=1e9 拿到题想找规律,手画开始一直数漏....,最后还是打了个表 (打表就是随便定个点为(0,0),然后(2,0),(4,0),(6,0),(1, ...
- 2018 ACM-ICPC亚洲区域赛 北京赛区
2018 ACM-ICPC亚洲区域赛 北京赛区 A - Jin Yong's Wukong Ranking List HihoCoder - 1870 题意 给N对关系,每对关系表示为A 比B 厉害, ...
- icpc西部区域赛_ICPC西部区域赛捷报传来!
ICPC西部区域赛(新疆赛区)圆满结束软件学子斩获佳绩 2020年10月31日,由新疆大学信息科学与工程学院(网络空间安全学院)承办的ICPC国际大学生程序设计竞赛2020年西部区域赛(新疆赛区)圆满 ...
- 2020年 ICPC 亚洲区域赛(上海)G-Fibonacci
ICPC 亚洲区域赛(上海) G-Fibonacci 题目 斐波那契数列为1,1,2,3,5,8,13,21,- 可以看到,这个数列有以下特点: 奇,奇,偶,奇,奇,偶- 当 xxx 与 yyy 相乘 ...
- 2018焦作ICPC E - Resistors in Parallel(规律+Java大数)
2018焦作ICPC E - Resistors in Parallel题目链接 Time limit 2000 ms Memory limit 1048576 kB In this physic ...
- Resistors in Parallel(Gym - 102028E 2018 ICPC 焦作E题 大数+规律C++版)
链接:传送门 题外话:这套题作为队内训练赛,然后找规律找炸了,后来补题,发现大家都在用java或者python写,太难了,不会啊,只会C++的萌新躲在墙角瑟瑟发抖,写下了这个C++版本的解题报告 题意 ...
- 2018年 ACM/ICPC亚洲区域赛 青岛赛区现场赛 比赛总结
首先祝贺自己收获了ACM生涯中的第二枚铜牌. 首先吐槽一下中石油: 周六早上来到中国石油大学,连个志愿者小姐姐都没看到.(但是看到了女装大佬).报完到之后发现教练少了一张午餐券(要不要这么粗心).为了 ...
- 第43届ACM icpc亚洲区域赛焦作站感想
青岛痛失银牌,焦作又是铜牌一枚,现在想想,前面三个水题,我的原因太大了,老是犯各种zz小错误,明明能秒,却花了大量时间debug,导致三个小时才签完到,最后一个小时,F题的bfs没出来,B题也没出来, ...
最新文章
- sql中union 和 union all的区别
- bugfree-工具
- 项目案例分享二:密码策略与上次交互式登录
- 对话推荐系统_RSPapers | 对话推荐系统论文合集
- MySQL repeat复制函数示例
- Impala手动安装
- 控制台打印列未定义错误
- linux下c语言利用iconv函数实现utf-8转unicode
- 使用一个程序同时启动多个程序(c#)
- 2021年中国无线通信模组企业排名
- 如何自学C语言(一个菜鸟的学习路)
- 正圆锥体空间方程_计算机基础算法(一)——时间与空间复杂度
- 游戏娱乐型型计算机装机配置单,组装配置单-急求 I5 性能最好的 电脑配置的 各种大型游戏能完美流畅的玩 价钱 和配置什么的 求详细...
- ROS学习笔记之——amcl源码的解读
- Windows快捷键小记
- 【乐逍遥网站设计】2022年网站设计与UI元素的趋势
- 学习OpenCV3:MinGW编译OpenCV到vs_version.rc.obj处出错
- 哈工大软件构造lab3
- iOS 第三方登录之 新浪微博登录
- Linux生产者消费者模型