HDU 5407 CRB and Candies (2015多校第10场第一题)素数打表,除法取模(乘法逆元)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5407

题意:求N个不同的糖果吃K个的所有情况的最小公倍数,并取模

思路:简单一推,就知道结果为n的所有排列的LCM,但是直接这样做的话一定超时,所以得换种方式,因为每个n都有唯一解,所以求助于OEIS http://oeis.org/?language=english ,将给出的案例一一输入可得

HDU 5407 CRB and Candies (2015多校第10场第一题)素数打表,除法取模(乘法逆元)_第1张图片


这样就有了公式 LCM{1,2,...,n} / n. 再求出LCM{1,2,...,n} 



其中这个公式为

所以之后我们就知道了先要打一个1~10^6的素数表,再打出所有的素数的多次方,但是因为有除法取模所以要求逆元

代码:

#include 
#include 
#include 
#include 
using namespace std;
#define LL __int64
#define N 1000005
#define mod 1000000007

LL f[N];
bool isPrime[N];
int total;//计数
int prime[79000];
int vis[N];
void getPrime()
{
    total=0;
    memset(isPrime,true,sizeof(isPrime));
    memset(prime,0,sizeof(prime));
    memset(vis,0,sizeof(vis));
    for(int i=2; i<=N-5; i++)
    {
        if(isPrime[i]) prime[total++]=i;
        for(int j=0; j



你可能感兴趣的:(HDU,乘法逆元)