zoukankan      html  css  js  c++  java
  • 3930: [CQOI2015]选数

    Time Limit: 10 Sec  Memory Limit: 512 MB
    Submit: 1958  Solved: 979
    [Submit][Status][Discuss]

    Description

     我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案。小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公约数,以便进一步研究。然而他很快发现工作量太大了,于是向你寻求帮助。你的任务很简单,小z会告诉你一个整数K,你需要回答他最大公约数刚好为K的选取方案有多少个。由于方案数较大,你只需要输出其除以1000000007的余数即可。

     

    Input

    输入一行,包含4个空格分开的正整数,依次为N,K,L和H。

     

    Output

    输出一个整数,为所求方案数。

     

    Sample Input

    2 2 2 4

    Sample Output

    3

    HINT

     

     样例解释


    所有可能的选择方案:(2, 2), (2, 3), (2, 4), (3, 2), (3, 3), (3, 4), (4, 2), (4, 3), (4, 4)

    其中最大公约数等于2的只有3组:(2, 2), (2, 4), (4, 2)

    对于100%的数据,1≤N,K≤10^9,1≤L≤H≤10^9,H-L≤10^5
     
    正解应该是莫比乌斯反演,用特殊性质的dp+快速幂水过了。。。
     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 
     5 #define LL long long
     6 const int MAXN=100005;
     7 const int mod=1000000007;
     8 LL n,k,l,h;
     9 LL f[MAXN];
    10 
    11 LL modexp(LL a,LL b)   
    12 {   
    13     LL ret=1;   
    14     LL tmp=a;   
    15     while(b)   
    16     {
    17         if(b&1) ret=ret*tmp%mod;   
    18         tmp=tmp*tmp%mod;   
    19         b>>=1;   
    20     }   
    21     return ret; 
    22 }
    23 
    24 int main()
    25 {
    26     scanf("%lld%lld%lld%lld",&n,&k,&l,&h);
    27     for(LL i=h-l;i>=1;i--)
    28     {
    29         LL L=(l-1)/(k*i),R=h/(k*i);
    30         f[i]=(modexp(R-L,n)-(R-L)+mod)%mod;
    31         for(LL j=2;i*j<=h-l;j++)
    32             f[i]=(f[i]-f[i*j]+mod)%mod;
    33     }
    34     if(l<=k&&k<=h) f[1]++;
    35     printf("%lld",f[1]);
    36     return 0;
    37 }
  • 相关阅读:
    LeetCode 275. H-Index II
    LeetCode 274. H-Index
    LeetCode Gray Code
    LeetCode 260. Single Number III
    LeetCode Word Pattern
    LeetCode Nim Game
    LeetCode 128. Longest Consecutive Sequence
    LeetCode 208. Implement Trie (Prefix Tree)
    LeetCode 130. Surrounded Regions
    LeetCode 200. Number of Islands
  • 原文地址:https://www.cnblogs.com/InWILL/p/10525949.html
Copyright © 2011-2022 走看看