XTU 1203 A simple problem
2016-03-03 09:54
489 查看
http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id/1203
首先倒着看,这题目肯定是根号n的复杂度,那么后根号n的数量比较分散,发现等差数列后即可求和去算, 前根号n的数正常算就ok!
然后发现需要高精度,那么就上java!注意讨论不同情况时候的终止条件就ok 了!
首先倒着看,这题目肯定是根号n的复杂度,那么后根号n的数量比较分散,发现等差数列后即可求和去算, 前根号n的数正常算就ok!
然后发现需要高精度,那么就上java!注意讨论不同情况时候的终止条件就ok 了!
//package hh; import java.io.*; import java.util.*; import java.lang.*; import java.math.*; import static java.math.BigInteger.*; public class Main { static Scanner cin; public static void solve(int cc) { long n=cin.nextLong(),i; BigInteger ans = ZERO; for (i = 1;;++i) { long from = n / (i + 1) + 1; long to = n / i; long num = to - from + 1; //项数 long sum = n % from + n % to; //首项 + 末项的和 if (sum%2==1) { num /= 2; } else { sum /= 2; } ans = ans.add(valueOf(sum ).multiply(valueOf(num ))) ; // sum * num 就是等差数列的和 if(i>=from) { System.out.println("Case "+cc+": "+ans); break; } ans = ans.add(valueOf(n % i)); if (from == i + 1) { System.out.println("Case "+cc+": "+ans); break; } } } public static void main(String[] args ) { cin=new Scanner(System.in); int t=cin.nextInt(),cc=0; while (t-->0) { new Main().solve(++cc); } } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树