京东Java笔试题第二题(幂运算种类数)这样做对不对?

//思路:这个结果包含三部分:
//1.左右都相等,存在n*n中情况
//2.左右两边的底数都是1的情况,这里存在n*(n-1)
//3.以2^4=(2^2)^2为例,当左边的指数为4时,右边将存在一个新的形式与之相等,故指数为4形成的结果为1*n*2。故找到规律:当指数为k时,所产生的情形是factor(k)*n*2,这里的factor(k)不能包含本身和1
    
import java.util.Scanner;
public class Main2 {
	private static int flag = 1000000007;
	// 求不包含1和n本身的因子个数
	private static int getFactor(int n) {
		int limit = (int) Math.sqrt(n);
		int count = 0;
		for(int i=2;i<=limit;i++)
			if(n%i==0)
				count++;
		return count;
	}
	public static long getMethod(int n) {
		long result = n * (2 * n - 1) % flag;// 这里是相等部分和1的部分
		for(int i=4;i<=n;i++) {
			int tmp = getFactor(i);
			result = (result+tmp*n*2)%flag;
		}
		return result;
	}

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		while (scanner.hasNext()) {
			int n = scanner.nextInt();
			long result = getMethod(n);
			System.out.println(result);
		}
		scanner.close();
	}
} 

全部评论
我也是用的找因子的方法,然而超时
点赞 回复 分享
发布于 2017-09-08 23:53
我用的是容斥+预处理 可以看一下套路和这题差不多: http://codeforces.com/contest/851/problem/D
点赞 回复 分享
发布于 2017-09-09 00:43

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务