51 nod 1189 阶乘分数

简介:

题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1189
题目思路:
1/n! = 1/x +1/y

==> n! * (x + y) = x * y(右边通分,然后转化)

==> n!^2 = (x - n!)*(y - n!)(左右两边加上n方)

==> a = b * c ,a = n!^2 ,b = x - n! ,c = y - n!

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
typedef long long LL;
const int mod = 1e9+7;
const int maxn=1e6+5;
bool prime[maxn];
int p[maxn/10];
int k;
void isprime()
{
    k=0;
    LL i,j;
    memset(prime, true, sizeof(prime));
    for(i=2; i<maxn; i++)
    {
        if(prime[i])
        {
            p[k++]=i;
            for(j=i*i; j<maxn; j+=i)
            prime[j]=false;
        }
    }
    /*for(int i=0; i<10; i++)
    cout<<p[i]<<" ";*/
}
LL get(LL m, LL p)
{
    if(m<p)
    return 0;
    return m/p+get(m/p,p);
}
LL quickmod(LL a, LL b)
{
    LL ans = 1;
    while(b)
    {
        if(b&1) ans=ans*a%mod;
        b>>=1;
        a=a*a%mod;
    }
    return ans ;
}
int main()
{
    isprime();
    int n;
    while(~scanf("%d",&n))
    {
        LL ans=1;
        LL m = quickmod(2,(LL)mod-2);
        for(int i=0; i<k&&p[i]<=n; i++)
        {
            LL tmp = (get(n,p[i])*2+1)%mod;
            ans=ans*tmp%mod;
        }
        ans = ans*m%mod;
        ans = (ans+m%mod)%mod;
        printf("%lld\n",ans);
    }
    return 0;
}
目录
相关文章
|
2月前
|
人工智能
PTA-输出斐波那契数列的前n项
输出斐波那契数列的前n项
20 0
|
16天前
PTA-第4章-12 求满足条件的斐波那契数
摘要:该问题要求编写程序找出大于输入正整数n的最小斐波那契数。斐波那契数列是前两项之和构成后续项的数列,起始为1、1。给定输入样例n=10,输出为13。代码通过while循环计算,直至找到第一个大于n的斐波那契数,并将其输出。
16 5
|
17天前
PTA-第4章-2 统计素数并求和
该代码用于统计并求和给定区间[M, N](1≤M≤N≤500)内的素数。输入包含两整数M和N,输出为素数个数和它们的和。例如,输入10 31,输出7 143。代码通过遍历区间,检查每个数是否能被小于它的数整除来判断是否为素数。
20 0
|
2月前
|
C++
【PTA】​ L1-009 N个数求和​ (C++)
【PTA】​ L1-009 N个数求和​ (C++)
96 0
【PTA】​ L1-009 N个数求和​ (C++)
|
6月前
|
容器
华为机试HJ60:查找组成一个偶数最接近的两个素数
华为机试HJ60:查找组成一个偶数最接近的两个素数
|
11月前
51nod 1189 阶乘分数(数论)
51nod 1189 阶乘分数(数论)
34 0
|
10月前
PTA 7-5 素数排位(10 分)
PTA 7-5 素数排位(10 分)
|
11月前
|
机器学习/深度学习 Windows
51nod 1258序列求和
51nod 1258序列求和
47 0
|
11月前
辗转相除法(既约分数)
辗转相除法(既约分数)
PTA 7-4 最近的斐波那契数 (20 分)
斐波那契数列 F n ​ 的定义为:对 n≥0 有 F n+2 ​ =F n+1 ​ +F n ​ ,初始值为 F 0 ​ =0 和 F 1 ​ =1。
67 0