码迷,mamicode.com
首页 > 其他好文 > 详细

[数论]Factors of Factorial

时间:2018-05-31 23:02:18      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:void   wing   oid   ace   you   include   stream   stand   amp   

题目描述

You are given an integer N. Find the number of the positive divisors of N!, modulo 109+7.

Constraints
1≤N≤103

输入

The input is given from Standard Input in the following format:
N

输出

Print the number of the positive divisors of N!, modulo 109+7.

样例输入

3

样例输出

4

提示

There are four divisors of 3! =6: 1, 2, 3 and 6. Thus, the output should be 4.

思路:将N!分解质因数,比如6!=720=2*2*2*2*3*3*5,质因子2有4个,3有2个,5有1个,可以取0~4个2,0~2个3,0~1个5构成720的因子,跟据乘法原理,720的因子有(4+1)*(2+1)*(1+1)=30个;

AC代码:

#include <iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define mod 1000000007
using namespace std;

bool isprime[1010];
int num[1010];

void judge(){
    for(int i=0;i<1010;i++) isprime[i]=1;
    isprime[0]=0;
    for(int i=2;i*i<1010;i++){
        if(isprime[i]){
            for(int j=i*i;j<1010;j+=i){
                isprime[j]=0;
            }
        }
    }
}

void get_prime(int x){
  for(int i=2;i<=x;i++){
    if(isprime[i]&&x%i==0){
        while(x%i==0){
            num[i]++;
            x/=i;
        }
    }
  }
}

int main()
{
    judge();
    int n;
    scanf("%d",&n);
    if(n==1) {printf("1\n"); return 0;}
    for(int i=2;i<=n;i++){
        get_prime(i);
    }
    long long ans=1;
    for(int j=2;j<=n;j++) if(vis[j]) ans=ans*(num[j]+1)%mod;
    cout<<ans<<endl;
    return 0;
}

[数论]Factors of Factorial

标签:void   wing   oid   ace   you   include   stream   stand   amp   

原文地址:https://www.cnblogs.com/lllxq/p/9119359.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!