比赛 |
防止浮躁的小练习v0.6 |
评测结果 |
AAAAAAAAAA |
题目名称 |
解方程 |
最终得分 |
100 |
用户昵称 |
kito |
运行时间 |
2.731 s |
代码语言 |
C++ |
内存使用 |
6.34 MiB |
提交时间 |
2016-10-20 16:56:49 |
显示代码纯文本
#include<cstdio>
using namespace std;
#define fcl fclose(stdin); fclose(stdout); return 0
#define SUBMIT 2333
typedef long long LL;
LL prime[7]={0,10007,10039,10111,10181,10301};
LL n,m;
LL A[7][110];
LL Target[1000010];
int main(){
#ifdef SUBMIT
freopen("equationa.in","r",stdin);
freopen("equationa.out","w",stdout);
#endif
scanf("%lld%lld",&n,&m);
char ch; bool flag=false;
for(LL i=n;i>=0;--i){
while(ch=getchar(),(ch<'0'||ch>'9')&&ch!='-');
if(ch=='-') flag=true;
else{
flag=false;
for(int j=1;j<=5;++j){
A[j][i]=ch-'0';
}
}
while(ch=getchar(),ch>='0'&&ch<='9'){
for(int j=1;j<=5;++j){
A[j][i]=(A[j][i]*10%prime[j]+ch-'0')%prime[j];
}
}
if(flag){
for(int j=1;j<=5;++j){
A[j][i]=prime[j]-A[j][i];
}
}
}
LL v;
for(int j=1;j<=5;++j){
for(LL x=1;x<=prime[j];++x){
v=A[j][0];
for(LL i=1;i<=n;++i){
v=((v*x)%prime[j]+A[j][i])%prime[j];
}
if(v==0){
for(LL i=x;i<=m;i+=prime[j]){
Target[i]++;
}
}
}
}
LL ANS=0;
for(LL i=1;i<=m;++i){
if(Target[i]==5){
ANS++;
}
}
printf("%lld\n",ANS);
for(LL i=1;i<=m;++i){
if(Target[i]==5){
printf("%lld\n",i);
}
}
#ifndef SUBMIT
getchar(); getchar();
#endif
fcl;
}