#线性筛求约数个数+逆元# [nssl 1520] 小清新期望题

Title

在这里插入图片描述
注意范围

在这里插入图片描述


Solution

  1. 性质当然很重要
  2. 注意用线性筛求约数个数的方法

图片转载于:https://www.cnblogs.com/TheRoadToTheGold/p/8228969.html
在这里插入图片描述

  1. 注意此题卡时间 ,可以优化一下
    . 在这里插入图片描述

在这里插入图片描述


Code(90)

#include<cstdio>
#include<algorithm>
#define rep(i,x,y) for(register int i=x;i<=y;i++)
using namespace std; 
const int N=20000011,mod=998244353; 
int m,prime[N],q,f[N],ans,inv[N],w[N]; 
void linear(int n){
	inv[1]=1; 
	rep(i,2,n){
		if (!w[i]) prime[++m]=i,w[i]=inv[i]=2; 
		rep(j,1,m){
			if (prime[j]>n/i) break;
			if(i%prime[j]==0) {
				w[i*prime[j]]=w[i]+1,inv[i*prime[j]]=inv[i]/w[i]*w[i*prime[j]]; 
				break;
			}
			else w[i*prime[j]]=2,inv[i*prime[j]]=inv[i]<<1; 
		}
	}
}
int main(){
	linear(N-11); 
	scanf("%d",&q); 
	f[1]=1; 
	rep(i,2,N/10) f[i]=1ll*(mod-mod/i)*f[mod%i]%mod; 
	rep(i,1,q) ans=(ans+f[inv[i]])%mod;  
	printf("%d",ans); 
	return 0; 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值