[JXOI2018]游戏 (线性筛,数论)

本文解析了一道JXOI2018的竞赛题目,通过定义关联数与特殊数的概念,采用线性筛算法筛选出特殊数,并结合组合数学原理计算出在特定条件下序列的有效操作数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[JXOI2018]游戏

AoJvCt.png

AotImD.png



\(solution:\)

这一道题的原版题面实在太负能量了,所以用了修改版题面。

这道题只要仔细读题,我们就可以将题目的一些基本性质分析出来:首先我们定义:对于某一类都可以被x整除的数(要在\([l,r]\) 之内),若x也在我们的\([l,r]\) 之内且x不能被\([l,r]\) 内任意其它数整除,我们称这类数为关联数且x为特殊数,(显然:当九条可怜查了x这间办公室后,所有以x为特殊数的关联数都不需要再检查了!)(而且:这一类以x为特殊数的关联数,只有且只要当x被检查后,这一类数都不需要检查了!)

然后我们可以将\([l,r]\) 内所有的数,都分为以不同数为特殊数的关联数。然后我们发现只有且只要当所有的特殊数都被检查后,整个\([l,r]\) 就都不需要检查了(这个可以根据上面括号里的第二条性质推出来)。所以我们用线性筛把这一类特殊数筛出来(我们不难发现对于一个数x,如果它除以它的最小因子(得到比它小的最大的约数),如果它不在\([l,r]\) 内,则说明它是一个特殊数)。然后我们可以枚举最后一个特殊数在操作序列中出现的位置(假设现在枚举到i),于是这个序列的后面一部分(即n-i个数)就无关紧要了,这相当于我们从tot(假设\([l,r]\) 中不是特殊数的有tot个)个非特殊数中取出n-i个数随便排列,然后i之前特殊数和非特殊数也可以随便排列。

于是我们得出答案就是:

\(ans=\sum_{i=tot}^n i*tot*C\tbinom{n-i}{n-tot}*(n-i)!*(i-1)!\)

按顺序:(枚举最后一个特殊数的位置)(最后一个特殊数数在i结束,会有i的贡献)(这个位置可以是tot里的任意一个特殊数)(从剩下的非组合数n-tot个中取出n-i个放在i后面)(后面的n-i个非特殊数数可以随便排列)(前面的i-1个数也可以随便排列)

于是我们可以暴力求阶乘,阶乘逆元,还有线性筛即可。



\(code:\)

#include<iostream>
#include<cstdio>
#include<iomanip>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>

#define ll long long
#define db double
#define inf 0x7fffffff
#define rg register int

using namespace std;

const int mod=1e9+7;

int l,r,n,tot,ans;
int ni[10000005];
int jc[10000005];
int pr[10000005];
int use[10000005];

inline int qr(){
    char ch;
    while((ch=getchar())<'0'||ch>'9');
    int res=ch^48;
    while((ch=getchar())>='0'&&ch<='9')
        res=res*10+(ch^48);
    return res;
}

inline int ksm(ll x,int y,int p){
    ll res=1;
    while(y){
        if(y&1)(res*=x)%=p;
        (x*=x)%=p; y>>=1;
    }return res;
}

int main(){
    //freopen(".in","r",stdin);
    //freopen(".out","w",stdout);
    l=qr(); r=qr(); n=r-l+1; jc[0]=1;
    for(rg i=1;i<=r;++i)
        jc[i]=(ll)jc[i-1]*i%mod;
    ni[r]=ksm(jc[r],mod-2,mod);
    for(rg i=r;i;--i)
        ni[i-1]=(ll)ni[i]*i%mod;
    if(l==1){printf("%lld\n",(ll)jc[r]*(n+1)%mod*ksm(2,mod-2,mod)%mod);return 0;}
    for(rg i=2;i<=r;++i){
        if(!use[i])use[i]=i,pr[++tot]=i;
        for(rg j=1;j<=tot;++j){
            if(pr[j]*i>r)break;
            use[pr[j]*i]=pr[j];
            if(!(i%pr[j]))break;
        }
    } tot=0;
    for(rg i=l;i<=r;++i)if(i/use[i]<l)++tot;
    for(rg i=tot;i<=n;++i){
        (ans+=(ll)tot*jc[n-tot]%mod*jc[i]%mod*ni[i-tot]%mod)%=mod;
    }printf("%d\n",ans);
    return 0;
}

转载于:https://www.cnblogs.com/812-xiao-wen/p/10682823.html

内容概要:该论文探讨了一种基于粒子群优化(PSO)的STAR-RIS辅助NOMA无线通信网络优化方法。STAR-RIS作为一种新型可重构智能表面,能同时反射和传输信号,与传统仅能反射的RIS不同。结合NOMA技术,STAR-RIS可以提升覆盖范围、用户容量和频谱效率。针对STAR-RIS元素众多导致获取完整信道状态信息(CSI)开销大的问题,作者提出一种在不依赖完整CSI的情况下,联合优化功率分配、基站波束成形以及STAR-RIS的传输和反射波束成形向量的方法,以最大化总可实现速率并确保每个用户的最低速率要求。仿真结果显示,该方案优于STAR-RIS辅助的OMA系统。 适合人群:具备一定无线通信理论基础、对智能反射面技术和非正交多址接入技术感兴趣的科研人员和工程师。 使用场景及目标:①适用于希望深入了解STAR-RIS与NOMA结合的研究者;②为解决无线通信中频谱资源紧张、提高系统性能提供新的思路和技术手段;③帮助理解PSO算法在无线通信优化问题中的应用。 其他说明:文中提供了详细的Python代码实现,涵盖系统参数设置、信道建模、速率计算、目标函数定义、约束条件设定、主优化函数设计及结果可视化等环节,便于读者理解和复现实验结果。此外,文章还对比了PSO与其他优化算法(如DDPG)的区别,强调了PSO在不需要显式CSI估计方面的优势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值