zoukankan      html  css  js  c++  java
  • HDU 6069 Counting Divisors(2017 Multi-University Training Contest

      

    Output
    For each test case, print a single line containing an integer, denoting the answer.
     
    Sample Input
    3 1 5 1 1 10 2 1 100 3
     
    Sample Output
    10 48 2302
     
     
    题意:就是那个公式
    感觉还是题解讲的清楚
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstdlib>
     4 #include<cctype> 
     5 #include<cmath>
     6 #include<cstring>
     7 #include<map>
     8 #include<set>
     9 #include<queue>
    10 #include<vector>
    11 #include<algorithm>
    12 #include<string> 
    13 #define ll long long
    14 #define eps 1e-10
    15 #define LL unsigned long long
    16 using namespace std; 
    17 const int maxn=1000000+100;
    18 const int mod=998244353;
    19 int vis[maxn];
    20 int prim[maxn];
    21 ll a[maxn];
    22 ll b[maxn];
    23 int len;
    24 void get_prim() 
    25 {
    26     memset(vis,0,sizeof(vis));
    27     int m=sqrt(maxn+0.5);
    28     for(int i=2;i<=m;i++)
    29     if(vis[i]==0)
    30     for(int j=i*i;j<=maxn;j+=i)
    31     vis[j]=1;
    32     len=0;
    33     for(int i=2;i<=maxn;i++)
    34     if(vis[i]==0)
    35     prim[len++]=i;
    36 }
    37 int main()
    38 {
    39     int t;
    40     ll l,r,k;
    41     get_prim();
    42     scanf("%d",&t);
    43     while(t--)
    44     {
    45         scanf("%lld%lld%lld",&l,&r,&k);
    46         for(int i=0;i<maxn;i++)
    47         {
    48           a[i]=1;
    49           b[i]=i+l;
    50         }
    51           for(int i=0;i<len;i++)
    52           {
    53               ll cnt=l;
    54             if(l%prim[i])cnt=l+prim[i]-l%prim[i];
    55               for(ll j=cnt;j<=r;j+=prim[i])
    56               {
    57                   int count=0;
    58                   while(b[j-l]%prim[i]==0)
    59                   {
    60                       count++;
    61                       b[j-l]/=prim[i];
    62                 }
    63                 a[j-l]=((k*count+1)%mod*a[j-l])%mod;
    64               }
    65           }
    66           ll ans=0;
    67           for(int i=0;i<=r-l;i++)
    68           if(b[i]>1)
    69           a[i]=(a[i]*(k+1))%mod;
    70           for(int i=0;i<=r-l;i++)
    71           {
    72               ans=(ans+a[i])%mod;
    73           }
    74           printf("%lld
    ",ans);
    75     }
    76     return 0;
    77 }
     
  • 相关阅读:
    webjars管理静态资源
    SpringCloud踩坑日记
    ELK日志搜索平台搭建
    新硬盘挂载到目录后目录原先数据消失解决办法
    nginx安装缺少依赖记录
    SpringCloud踩坑日记
    .bashrc配错刷新导致linux基础命令不能用修复
    nginx超时时间配置
    nginx日志切分shell脚本
    2019.10.10 实习日记
  • 原文地址:https://www.cnblogs.com/Aa1039510121/p/7282572.html
Copyright © 2011-2022 走看看