暑假集训题目。真的是涨姿势了。
如果高阶方程的最高系数是1。那么他的根必然是整数根。
题目要求求无理根的个数,则n减去有理跟的个数,其中注意判断重根。
重根判断:已知某个满足条件的根对于原方程成立,求导之后,如果仍然满足方程,则必然是一次重根,继续操作就是二次,三次。
#include<bits/stdc++.h>
using namespace std;
int a[10];
int n;
int cnt;
int b[10];
void judge(int x)
{
for(int i=0;i<=n;i++)
b[i]=a[i];
for(int i=1;i<=n;i++){//down
for(int j=0;j<n;j++)
b[j]=b[j+1]*(j+1);
long long sum=0;
long long temp=1;
for(int j=0;j<=n-i;j++){
sum+=b[j]*temp;
temp*=x;
}
//cout<<sum<<endl;
if(sum==0)
cnt++;
else break;
}
}
int main()
{
while(cin>>n)
{
memset(a,0,sizeof(a));
for(int i=n-1; i>=0; i--)
cin>>a[i];
a[n]=1;
cnt=0;
for(int i=-10; i<=10; i++)
{
long long ans=0;
long long temp=1;
for(int j=0;j<=n;j++){
if(j==n)
ans+=temp;
else
ans+=a[j]*temp;
temp*=i;
}
if(ans==0){
//cout<<i<<endl;
cnt++;
judge(i);
}
//cout<<ans<<" "<<cnt<<endl;
}
//cout<<cnt<<endl;
cout<<n-cnt<<endl;
}
return 0;
}