NOIP2014 TG T6 解方程
NOIP2015都快来了,窝还在订正2014的题,484太弱了啊
听了某大神的数论,就开始做这道当年看完题目就弃疗的题~~~
然后怎么写都不对。。。
最后猛然发现自己的错误在warning里面被提醒过一遍
果真是自己傻B了。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#define MM 1000010
using namespace std;
const int mod[] = {10007,10917,30071};
char s[10010];
int n,m,l;
long long a[110][5],f[MM][5];
long long ans[MM];
bool check(int xx,int yy)
{
long long tmp=0;
for (int i=n;i>=0;--i)
{
tmp=(tmp*xx+a[i][yy])%mod[yy];
}
return tmp!=0;
}
int main()
{
cin>>n>>m;
for (int w=0;w<=n;++w)
{
scanf("%s",s);
l=strlen(s);
bool ff=0;
for (int i=0;i<l;++i)
{
if (s[i]=='-') ff=1;
else
for (int j=0;j<3;++j)
{
a[w][j]=(a[w][j]*10+s[i]-'0')%mod[j];
}
}
if (ff) for (int j=0;j<3;++j) a[w][j]=mod[j]-a[w][j];
}
ans[0]=0;
for (int j=0;j<3;++j)
for (int i=0;i<mod[j];++i)
f[i][j]=check(i,j);
for (int i=1;i<=m;++i)
{
bool ff=1;
for (int j=0;j<3;++j)
{
if (f[i%mod[j]][j]) {
ff=0; break;
}
}
if (ff) ans[++ans[0]]=i;
}
printf("%d\n",ans[0]);
for (int i=1;i<=ans[0];++i) printf("%d\n",ans[i]);
return 0;
}
get√技能~~~傲娇地无视掉warning。。。
以后努力不这么做。。。兹磁哦
评论 (0)