[BZOJ3751][NOIP2014]解方程(乱搞)
2017-09-15 16:09
183 查看
题目:我是超链接
题解:
显然若f(n)≡0(modp),则f(n+p)≡0(modp)。
所以我们可以选上几个质数,然后check出0-p-1之内的答案,然后由这些答案推出1-m内的答案。选上5个质数就差不多了。(五个质数摘自学姐blog)
代码:
题解:
显然若f(n)≡0(modp),则f(n+p)≡0(modp)。
所以我们可以选上几个质数,然后check出0-p-1之内的答案,然后由这些答案推出1-m内的答案。选上5个质数就差不多了。(五个质数摘自学姐blog)
代码:
#include <cstdio> #include <cstring> using namespace std; const int Mod[5]={11261,19997,22877,21893,14843}; int ans[1000005],n,m,aa[120],cnt,mi[120]; bool ha[1000005],is[30015]; char a[120][10005]; int pula(int i,int mod) { int ans=0,mq=0,ff=1,j,l=strlen(a[i]); if (a[i][mq]=='-') ff=-1,mq++; for (j=mq;j<l;j++) ans=ans*10+a[i][j]-'0',ans%=mod; return ans*ff; } int main() { int i,j,k; scanf("%d%d",&n,&m); for (i=0;i<=n;i++) scanf("%s",a[i]); for (i=1;i<=m;i++) ha[i]=1; for (i=0;i<=4;i++) { for (j=0;j<Mod[i];j++) is[j]=1; for (j=n;j>=0;j--) aa[j]=pula(j,Mod[i]); for (j=0;j<Mod[i];j++) { mi[0]=1; for (k=1;k<=n;k++) mi[k]=mi[k-1]*j%Mod[i]; int lj=0; for (k=0;k<=n;k++) lj=(lj+mi[k]*aa[k]%Mod[i])%Mod[i]; if (lj) is[j]=0; } for (j=1;j<=m;j++) if (!is[j%Mod[i]]) ha[j]=0; } for (i=1;i<=m;i++) if (ha[i]) ans[++cnt]=i; printf("%d\n",cnt); for (i=1;i<=cnt;i++) printf("%d\n",ans[i]); }
相关文章推荐
- [BZOJ3751][NOIP2014]解方程(数学相关+乱搞)
- 【乱搞】BZOJ3751(UOJ#20)[NOIP2014]解方程
- [BZOJ3751][NOIP2014][数学][乱搞]解方程
- bzoj 3751: [NOIP2014]解方程(同余系)
- BZOJ 3751: [NOIP2014]解方程 数学
- 【BZOJ 3751】 [NOIP2014]解方程
- 【秦九韶算法】【字符串哈希】bzoj3751 [NOIP2014]解方程
- 【bzoj3751】[NOIP2014]解方程 数论
- 【BZOJ】3751: [NOIP2014]解方程
- BZOJ3751 [NOIP2014]解方程
- bzoj 3751: [NOIP2014]解方程 同余系枚举
- 【hash】BZOJ3751-[NOIP2014]解方程
- bzoj 3751: [NOIP2014]解方程【数学】
- 【数论】[NOIP2014]bzoj3751 codevs3732 解方程
- BZOJ 3751 [NOIP2014]解方程 百年老坑填坑计划QAQ--Hash
- NOIP2014 D2T3 解方程 BZOJ3751 UOJ20 数论 秦九韶算法 玄学
- 【bzoj3751】【洛谷P2312】【NOIP2014】解方程
- NOIP2014 bzoj3751 Day2T3 解方程 数学&hash
- BZOJ3751: [NOIP2014]解方程
- [BZOJ3751][NOIP2014] 解方程