【遇见时光】笔试-大的奇约数-java
2016-09-13 09:21
197 查看
题目f(x)是x的最大奇偶数,f(44)=11,f(3)=3;
例如N=7;输出f(1)+f(2)+f(3)+f(4)+f(5)+..+f(7)=1+1+3+1+5+3+7=21
输入一个N,求f(1)+f(2)+f(3)+...+f(N)
思路:因为编译器有很高的时间限制,所以在程序里求约数时从2开始求会超时。换种思路考虑,奇数最大奇约数即它本身,主要求偶数的奇约数;一般来说n的约数以sqrt(n)为界,取i=1至sqrt(n),约数要么是i,要么是n/i;大部分数据的最大奇约数都在n/i中,但是如12=3*4,sqrt(12)=3,n/i取不到最大奇约数3,但是可以发现3是12的约数存在于i中。
所以代码如下:
结果:
可以看出用这种方法运行速度非常快。牛客网提示超时;说明nlogn算法不行;考虑用递归实现吧,参见大神之作http://www.cnblogs.com/wangxiaobao/p/5866351.html
例如N=7;输出f(1)+f(2)+f(3)+f(4)+f(5)+..+f(7)=1+1+3+1+5+3+7=21
输入一个N,求f(1)+f(2)+f(3)+...+f(N)
思路:因为编译器有很高的时间限制,所以在程序里求约数时从2开始求会超时。换种思路考虑,奇数最大奇约数即它本身,主要求偶数的奇约数;一般来说n的约数以sqrt(n)为界,取i=1至sqrt(n),约数要么是i,要么是n/i;大部分数据的最大奇约数都在n/i中,但是如12=3*4,sqrt(12)=3,n/i取不到最大奇约数3,但是可以发现3是12的约数存在于i中。
所以代码如下:
package test; import java.util.Scanner; public class maxQishu { public static int MaxYueshu(int n) { // 奇数直接返回 if ((n & 1) == 1) return n; int i = 0; int s=(int) Math.sqrt(n); // max存第一个最大的约数i int max=0; int k=0; for (i =(int) Math.sqrt(n) ; i >0; i--) { if (n % i == 0){ if((i&1) == 1&&(i>max)) max=i; k=n / i; if((k &1) == 1){ break; } } } if(i==0) k=1; return max>k?max:k; } public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in); int n = in.nextInt(); int r = 0; long startTime=System.currentTimeMillis(); //获取开始时间 for (int i = 1; i <= n; i++) { // if((i &1) == 0) // System.out.println("-----"+i+"\t"+MaxYueshu(i)); r = r + MaxYueshu(i); } // System.out.println(MaxYueshu(15)); System.out.println(r); long endTime=System.currentTimeMillis(); //获取结束时间 System.out.println("程序运行时间: "+(endTime-startTime)+"ms"); } }
结果:
30000 250635784 程序运行时间: 26ms
可以看出用这种方法运行速度非常快。牛客网提示超时;说明nlogn算法不行;考虑用递归实现吧,参见大神之作http://www.cnblogs.com/wangxiaobao/p/5866351.html
相关文章推荐
- 【遇见时光】笔试-下蹲-java实现
- 【遇见时光】笔试-偶数最大距离-java
- [遇见时光]内推笔试-藏宝图-java实现
- 【遇见时光】小米笔试-树的高度-java
- [遇见时光]剑指offer-顺时针打印矩阵java
- 笔试中经常遇见的台阶问题(java版本)
- Java笔试中遇见奇怪问题积累篇
- [遇见时光]java多线程中run和start方法
- [遇见时光]Java多线程
- 有感:应聘Java笔试时可能出现问题及其答案(第二版part four)
- java面试笔试题大汇总[转]
- 有感:应聘Java笔试时可能出现问题及其答案(第二版Part one)
- JAVA工程师笔试大全[J2EE]
- 应聘Java笔试时可能出现问题及其答案
- 有感:应聘Java笔试时可能出现问题及其答案
- java面试笔试题大汇总
- 有感:应聘Java笔试时可能出现问题及其答案(第二版part two)
- 应聘Java笔试时可能出现问题及其答案
- java面试笔试题大汇总
- 应聘Java笔试时可能出现问题