3935.解方程

Description

已知多项式方程:
a 0 + a 1 x + a 2 x 2 + ⋯ + a n x n = 0 \Large a_{0}+a_{1} x+a_{2} x^{2}+\cdots+a_{n} x^{n}=0 a0+a1x+a2x2++anxn=0
求这个方程在[1,m]内的整数解(n,m均为整数)

Input

在这里插入图片描述

Output

在这里插入图片描述

Data Constraint

在这里插入图片描述

Code

#include
#include
#include
using namespace std;
int n,m,a[10][1005],sum[1000005];
char ch[20005];
const int prm[7]={15259,26833,25889,19249,26681,21517,21739};
int main()
{
	scanf("%d%d",&n,&m); 
	int i,j,k;
	for (i=0; i<=n; i++)
	{
		scanf("%s",ch+1); 
		int len=strlen(ch+1),p=1;
		if (ch[1]=='-')
		{ 
			ch[1]='0'; 
			p=-1; 
		}
		for (j=0; j<7; j++)
		{
			for (k=1; k<=len; k++) 
				a[j][i]=(a[j][i]*10+ch[k]-'0')%prm[j];
			a[j][i]=p*a[j][i]%prm[j];
		}
	}
	for (i=0; i<7; i++)
		for (j=0; j<prm[i]; j++)
		{
			int x=a[i][n];
			for (k=n-1; k>=0; k--) 
				x=(x*j+a[i][k])%prm[i];
			if (!x) 
				for (k=j; k<=m; k+=prm[i]) 
					sum[k]++;
		}
	int ans=0; 
	for (i=1; i<=m; i++) 
		if (sum[i]==7) 
			ans++;
	printf("%d\n",ans); 
	for (i=1; i<=m; i++) 
		if (sum[i]==7) 
			printf("%d\n",i);
	return 0;
}

你可能感兴趣的:(信息学)