Luogu P2312 解方程

据大佬的说法这种大力乱搞题出在除NOIp以外的任何比赛都是很好的然而就是被出在了NOIp

首先对于想直接上高精的同学,我还是祝你好运吧。

我们考虑一个十分显然的性质,若a=b,则对于任一自然数k都有a mod k=b mod k

所以我们考虑一下把这个等式转换成膜意义下的。

实际上就是对于那一个方程,我们取得一个值x时,计算其膜某个数的值,若为0则可以认定它有概率为正确的答案。

那么取什么值呢,根据正常人的经验,我们取一个大质数可以比较合理的保证均衡。

但是为了保证正确性,我们取两个值,同时也有一个小trick,这个具体看CODE吧。

关于那个求多项式的就不用我说了吧,一个秦九昭算法套上去就好了

CODE

#include<cstdio>
#include<cctype>
using namespace std;
const int N=105,M=1e6+5,p1=99991,p2=1e9+7;
int a1[N],a2[N],n,m,ans[M],cnt; bool vis[M];
inline char tc(void)
{
    static char fl[100000],*A=fl,*B=fl;
    return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
}
inline void read(int &x)
{
    x=0; char ch; while (!isdigit(ch=tc()));
    while (x=(x<<3)+(x<<1)+ch-'0',isdigit(ch=tc()));
}
inline void getnum(int id)
{
    a1[id]=a2[id]=0; char ch; int flag=1; while (!isdigit(ch=tc())) flag=ch^'-'?1:-1;
    while (a1[id]=(10LL*a1[id]+ch-'0')%p1,a2[id]=(10LL*a2[id]+ch-'0')%p2,isdigit(ch=tc())); a1[id]*=flag; a2[id]*=flag; 
}
inline void write(int x)
{
    if (x>9) write(x/10);
    putchar(x%10+'0');
}
inline bool check(int *a,int x,int mod)
{
    register int i; int res=0;
    for (i=n;i>=0;--i)
    res=1LL*(res+a[i])*x%mod;
    return !res;
}
int main()
{
    //freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
    register int i,j; read(n); read(m);
    for (i=0;i<=n;++i) getnum(i);
    for (i=1;i<=p1;++i)if (!vis[i])
    if (check(a1,i,p1)) for (j=i;j<=m;j+=p1) check(a2,j,p2)&&(vis[j]=1);
    for (i=1;i<=m;++i) vis[i]&&(ans[++cnt]=i);
    for (write(cnt),putchar('\n'),i=1;i<=cnt;++i)
    write(ans[i]),putchar('\n'); return 0;
}
posted @   空気力学の詩  阅读(109)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 上周热点回顾(1.20-1.26)
· 【译】.NET 升级助手现在支持升级到集中式包管理
点击右上角即可分享
微信分享提示