OI 2017 吉大冬令营 Day 4

今天知识点是数论 考试真的是暴力啊 最后一题因为x0 y0爆零了让我很不爽啊  +60我就rank1

D4T1  取球游戏

题目大意:

桌子上放着 N 个球,每个球都有一个编号,第i个球的编号为i。请你求出一共存在多少种不同的取法,使得取出的 M 个球编号的最小值恰 好为K。由于结果可能很大,请输出结果对109+7(这是一个质数)取模的值。
数据范围:100%数据:n<=1000000,m<=1000000,1<=k<=n

思路:

这道题本意是让我们求Cnm--k1 那么我们就可以通过求逆元来求出组合数

顺利AC

#include<cstdio>
#include<algorithm>
using namespace std;
#define mod 1000000007ll
int n,m,k;
long long a[1000010];
long long ksm(long long x,long long y)
{
    long long sum=1;
    while(y)
    {
        if(y&1)sum=(sum*x)%mod;
        y=y>>1;
        x=x*x%mod;
    }
    return sum;
}
long long tmp=1;
long long ans=1;
int main()
{
    scanf("%d%d%d",&n,&m,&k);
    n=n-k,m--;
    if(m==0)
    {
        printf("1");
        return 0;
    }
    for(int i=2;i<=n;i++) 
        tmp=(tmp*i)%mod;
    a[n]=ksm(tmp,mod-2);
    for(int i=n-1;i>=1;i--)
        a[i]=(a[i+1]*(i+1))%mod;
    ans=ans*tmp%mod*a[m]%mod*a[n-m]%mod;
    printf("%lld",ans);
    return 0;
}

D4T2 公约数问题

题目大意:

给定正整数 N,请你解决下面两个子任务。
1. 求有多少对(i, j)满足gcd(i,j)=1
2,求有多少对(i, j)满足gcd(i,j)为素数。
其中1<=i,j<=N

思路:

子任务1:其实所求就是2{ ∑φ(i)}-1 预处理欧拉函数值即可

发表评论

邮箱地址不会被公开。 必填项已用*标注