关注
第二题是算幂次可能组合的,我一开始写错了,只过了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;
}
}
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 牛客2025仙途报告 #
4665次浏览 138人参与
# 礼物开箱Plog #
1678次浏览 75人参与
# 2025年终总结 #
177664次浏览 3002人参与
# 工作两年,想和老板谈涨薪怎么说 #
38799次浏览 175人参与
# 你面试体验感最差/最好的公司 #
22541次浏览 366人参与
# 秋招落幕,你是He or Be #
15819次浏览 293人参与
# 考公VS就业,你怎么选? #
88117次浏览 497人参与
# 一人说一个提前实习的好处 #
14247次浏览 232人参与
# 今年你最想重开的一场面试是? #
5801次浏览 76人参与
# 离家近房租贵VS离家远但房租低,怎么选 #
13715次浏览 130人参与
# 重来一次,你会对开始求职的自己说 #
6982次浏览 177人参与
# 找工作,行业重要还是岗位重要? #
85838次浏览 1699人参与
# 各大公司公布25年Q3财报,你怎么看? #
5052次浏览 50人参与
# 实习没事做是福还是祸? #
18917次浏览 273人参与
# 机械制造秋招总结 #
97366次浏览 878人参与
# 宁德时代求职进展汇总 #
154164次浏览 686人参与
# 工作中听到最受打击的一句话 #
8438次浏览 134人参与
# 职场新人体验 #
156938次浏览 1121人参与
# 团建是“福利”还是是 “渡劫” #
8154次浏览 161人参与
# 反问环节如何提问 #
126463次浏览 2670人参与

