zoukankan      html  css  js  c++  java
  • 质数

    1.1 Discription
    小畅和阿尼巴是好朋友。
    如果你赶着 AK,请手动跳至最后一行
    阿尼巴特别喜欢质数。
    他认为质数就是有智慧的数,如果经常玩质数的话一定会变得像小畅
    一样充满智慧。
    然而这次他在玩一个数的时候,不小心把它给玩散了
    这个数散落得满地都是,以至于喜欢跳舞的小畅都没有地方跳街舞了!!!
    小畅十分气愤,恰好他知道阿尼巴喜欢质数
    于是就想出一道质数的题目来气气他
    “今天,我是作为一个长者在这里跟你讲话的。毕竟你啊,too young,
    too simple, sometimes naive。你以为玩质数就可以变得像我一样满腹
    智慧吗?想变的有智慧,先让我作为数论王者来考考你。怕你自卑,就
    不考你多项式 exp,ln,sqrt, 求逆那种稍微小学一点的内容了。设 f (i) 为
    i 的不同的质因子的个数。一个数 i 它散落在地上的方案就是 2 f (i) ,你
    啊现在给我求出 1 − n 所有数散落在地上的方案和。不然,既然不让我
    跳舞, 就不得不好好惩罚你了呢”
    咳咳,说人话,就是让你求$sum_{i=1}^{n}2^{f(i)}$,其中 f (i) 表示 i 的不同的质因子的个数
    答案对 998244353 取模
     Input format
    第一行一个正整数 n
    Output format
    输出一行,表示答案
    Sample Input
    2
    Sample Input
    3
    Hint
    20% 的数据满足 n ≤ 10^6
    100% 的数据满足 1 ≤ n ≤ 10^12

    首先$2^{f(x)}$可以看作把x的质因数分配给$i$和$j$,显然$gcd(i,j)=1$

    所以$sum_{i=1}^{n}sum_{d|i}[gcd(d,frac{i}{d})=1]$

    $sum_{i=1}^{n}sum_{d|i}sum_{p|d wedge p|frac{i}{d}}mu(p)$

    $g(i)$表示$i$的约数个数

    $sum_{i=1}^{n}sum_{p^2|i}g(frac{i}{p^2})mu(p)$

    $sum_{p=1}^{sqrt(n)}mu(p)sum_{i=1}^{frac{n}{p^2}}g(i)$

    $sum_{i=1}^{frac{n}{p^2}}g(i)=sum_{i=1}^{frac{n}{p^2}}sum_{d|i}1$

    交换一下变成$sum_{p=1}^{sqrt(n)}mu(p)sum_{i=1}^{frac{n}{p^2}}[frac{n}{p^2*d}]$

    然后枚举p套一个数论分块就可以了

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<cmath>
     6 using namespace std;
     7 typedef long long lol;
     8 lol mu[1000001],n,lim,ans,Mod=998244353,pri[10000001],tot;
     9 bool vis[10000001];
    10 lol query(lol x)
    11 {lol pos,i;
    12   lol sum=0;
    13   for (i=1;i<=x;i=pos+1)
    14     {
    15       pos=x/(x/i);
    16       sum+=(pos-i+1)*(x/i)%Mod;sum%=Mod;
    17     }
    18   return sum;
    19 }
    20 int main()
    21 {lol i,j;
    22   cin>>n;
    23   lim=sqrt(n);
    24   mu[1]=1;
    25   for (i=2;i<=lim;i++)
    26     {
    27       if (vis[i]==0)
    28     {
    29       pri[++tot]=i;
    30       mu[i]=-1;
    31     }
    32       for (j=1;j<=tot;j++)
    33     {
    34       if (1ll*i*pri[j]>lim) break;
    35       vis[i*pri[j]]=1;
    36       if (i%pri[j]==0)
    37           break;
    38       else mu[i*pri[j]]=-mu[i];
    39     }
    40     }
    41   for (i=1;i<=lim;i++)
    42     {
    43       ans+=mu[i]*query(n/(i*i));
    44       ans=(ans+Mod)%Mod;
    45     }
    46   cout<<ans;
    47 }
  • 相关阅读:
    SpringBoot dubbo
    springboot security 安全
    SpringBoot 异步 定时任务 邮件
    elastic search book [ ElasticSearch book es book]
    SpringBoot amqp MQ RabbitMQ
    为Nexus配置阿里云代理仓库【转】
    PLSQL表乱码
    hibernate注解的包
    Spring的refresh()方法相关异常
    spring3.1.1的各个jar作用
  • 原文地址:https://www.cnblogs.com/Y-E-T-I/p/8696509.html
Copyright © 2011-2022 走看看