1

来源:互联网 发布:好用的免费域名 编辑:程序博客网 时间:2024/06/02 02:43

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;    }}