import java.util.*; public class Main { //MAX就是根据输入的n所创建的数组大小 final static int MAX = (int) (1e6+5); final static int MOD = (int) (1E9+7); static boolean[] visited = new boolean[MAX]; public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); in.close(); System.out.println(helper(n)); } private static long helper(int n) { //最终的输出值 long ans = 1; //1的位置肯定是Y,固定的。所以从2开始计算 for(int i=2;i<=n;i++) { //保存i的幂的次数 int count = 0; //当visited[i]是true的时候,说明它是前面某个数的倍数,那他的值也就不由他决定了,没有必要继续往下走了, if(visited[i]) continue; //将i的倍数的位置全部设定为true,以后经过这个位置就跳过继续循环 for(int j=i+i;j<=n;j+=i) { visited[j] = true; } long mi = i; //计算i的幂的次数,值要小于等于n while(mi <= n) { count++; mi = mi*i; } //计算有多少和合法的组合 ans = ans * (count+1) % MOD; } return ans; } }
点赞 评论

相关推荐

ResourceUtilization:算法很难了,现在都需要相关论文还有对应的实习,可以先试试中厂
点赞 评论 收藏
分享
小明lll:不是哥们我以为驾照是段子呢
点赞 评论 收藏
分享
牛客网
牛客企业服务