洛谷2312:解方程(初等数论)
来源:互联网 发布:excel跨表格引用数据 编辑:程序博客网 时间:2024/05/23 02:00
听别人说是noip很有趣的一题。
题面
我一开始看成N,M都很大,以为是用NTT搞快速插值之类的,就自然想到取模。模1004535809为0,大概多项式就是0了。
再仔细看数据范围,发现可以暴力搞,大概选几个四位(质)数作为模数,枚举1~10000,分别在同余的情况下算出结果。
然后枚举1~m,看是否同余都为0即可。
#include <iostream>#include <fstream>#include <algorithm>#include <cmath>#include <ctime>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;#define mmst(a, b) memset(a, b, sizeof(a))#define mmcp(a, b) memcpy(a, b, sizeof(b))typedef long long LL;const int N=100100; const int M[6]={2233,2333,6666,9949,9967,9973};int num,n,m,a[6][N];bool ok[6][N];char cc[N];bool judge(int x){ for(int j=0;j<6;j++) if(!ok[j][x%M[j]]) return false; return true;}int main(){ cin>>n>>m; for(int i=0;i<=n;i++) { scanf("%s",cc); int len=strlen(cc); for(int j=0;j<6;j++) { int k=0,tu=1; if(cc[0]=='-') k=1,tu=-1; for(;k<len;k++) a[j][i]=((a[j][i]<<3)+(a[j][i]<<1)+cc[k]-'0')%M[j]; a[j][i]=(a[j][i]*tu+M[j])%M[j]; } } for(int j=0;j<6;j++) ok[j][0]=1; for(int i=1;i<=10000;i++) for(int j=0;j<6;j++) { int v=1,sum=0; for(int k=0;k<=n;k++) sum=(sum+a[j][k]*v)%M[j],v=v*i%M[j]; if(!sum) ok[j][i]=1; } for(int i=1;i<=m;i++) if(judge(i)) num++; cout<<num<<endl; for(int i=1;i<=m;i++) if(judge(i)) printf("%d\n",i); return 0;}
阅读全文
0 0
- 洛谷2312:解方程(初等数论)
- 读初等数论小节(线性同余方程)
- (初等数论)我是好人
- 初等数论
- 初等数论
- 初等数论
- bzoj 3751: [NOIP2014]解方程 (数论)
- HDU5974 数论+解方程
- HDU-1214-圆桌会议(初等数论)
- 20140714 「初等数论 - 拓展欧几里得+同余模方程」POJ 2115 C Looooops
- 20140714 「初等数论 - 拓展欧几里得+同余模方程」POJ 1061 青蛙的约会
- 初等数论重要定理
- 初等数论笔记
- 初等数论零散总结
- 初等数论1
- ACM初等数论
- 初等数论学习
- 初等数论2
- 网易云容器服务基于Kubernetes的实践探索
- 《Unity3D/2D游戏开发从0到1(第二版本)》 书稿完结总结
- QT QAbstractSocket类
- 模板函数,模板函数重载,显示具体化模板,实例化
- 2017年8月反思
- 洛谷2312:解方程(初等数论)
- myeclipse配置gradle插件
- git无法上传jar包问题
- learning R with swirl-sequences of numbers
- java新IO---文件锁
- 泪滴攻击
- JavaEE篇-不定时更新
- 每日一练(20171019)
- Solr特性。