关注
第二题是算幂次可能组合的,我一开始写错了,只过了20%,不知道这个对不对
import java.util.Scanner;
/**
* Created by YTY on 2017/9/8.
*/
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
long n = Long.parseLong(scanner.nextLine());
System.out.println(resolve(n) % 1000000007L);
}
private static long resolve(long n) {
long result = n * n + (n - 1) * n;//1的幂的所有组合n*n个,2至n的幂的相同次数组合(n - 1) * n个(比如2^1=2^1,2^2=2^2...)
for (long base = 2; base <= n; base++) {//从2开始,1计算过了
long maxBase = base;//记录base的pow次幂
boolean max = false;//记录base的pow次幂是不是已经超过n了
long maxPow = 0;//记录可能的偶数次幂个数
for (long pow = 2; pow <= n; pow++) {//从2开始,1计算过了
maxBase *= base;
if ((pow & 1) == 1) {//奇数次幂
//这边我做的时候写的是result += maxBase <= n ? 1 : 0, 在n>4的情况下是错的,所以只ac20%
result += maxBase <= n ? 2 : 0;////当前幂次没超过n,则maxBase^1=base^pow,反之也算一个,所以加2
} else {//偶数次幂
if (!max) {//当前幂次没超过n,可以试试看还有没有满足的可能
if (maxBase <= n) {//当前幂次没超过n
maxPow++;//可能的偶数次幂个数+1,即(base^maxBase)^2=base^pow
} else {
max = true;//当前幂次超过n,之后不用再统计maxPow了
}
}
result += 2 * maxPow;//对称的也算,所以乘2
}
}
}
return result;
}
}
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
11-03 14:26
武汉设计工程学院 运营 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 2025年终总结 #
173598次浏览 2929人参与
# 找工作,行业重要还是岗位重要? #
85427次浏览 1693人参与
# 职场上哪些行为很加分? #
307130次浏览 3458人参与
# 大家每天通勤多久? #
69973次浏览 449人参与
# 实习的内耗时刻 #
211358次浏览 1545人参与
# 你面试体验感最差/最好的公司 #
18229次浏览 300人参与
# 一人说一个提前实习的好处 #
11084次浏览 206人参与
# 今年你最想重开的一场面试是? #
4251次浏览 70人参与
# 秋招落幕,你是He or Be #
12654次浏览 245人参与
# 互联网行业现在还值得去吗 #
46936次浏览 351人参与
# 实习没事做是福还是祸? #
17116次浏览 259人参与
# 面试吐槽bot #
165030次浏览 814人参与
# 重来一次,你会对开始求职的自己说 #
6202次浏览 156人参与
# 反问环节如何提问 #
126397次浏览 2664人参与
# 礼物开箱Plog #
711次浏览 24人参与
# 工作中听到最受打击的一句话 #
6827次浏览 118人参与
# 团建是“福利”还是是 “渡劫” #
7328次浏览 150人参与
# 我的第一份实习怎么找的 #
208599次浏览 1827人参与
# 比亚迪工作体验 #
74781次浏览 281人参与
# 大家实习每天都在干啥 #
106568次浏览 581人参与
