LOJ #525. 「LibreOJ β Round #4」多项式
题意
给定一个正整数 k k ,你需要寻找一个系数均为 到 k−1 k − 1 之间的非零多项式 f(x) f ( x ) ,满足对于任意整数 x x 均有 k) k )
题解
我们知道欧拉定理是:若 a 与 n 互质,则 aϕ(n)≡1(mod a ϕ ( n ) ≡ 1 ( m o d n) n )
这里我们提出扩展欧拉定理:任意正整数 x x ,都有 (mod ( m o d p) p )
所以我们可以得到 nx+φ(p)−nx≡0 n x + φ ( p ) − n x ≡ 0 (mod ( m o d p) p )
我们可用令 x=φ(p) x = φ ( p ) 就可以得到一个正确式子
然而题目要求系数不能为负数
所以我们给式子加上一个 k⋅nx k ⋅ n x
也就可以得到 nφ(p)+φ(p)+(k−1)nφ(p)≡0 n φ ( p ) + φ ( p ) + ( k − 1 ) n φ ( p ) ≡ 0 (mod ( m o d p) p )
然后求一个 phi p h i 就可以了
代码
#include <cstdio>
int k;
int gcd(int x,int y){
if(!y) return x;
return gcd(y,x%y);
}
int main(){
scanf("%d",&k);
if(k==1){puts("-1");return 0;}
int phi=1;
for(int i=2;i<k;i++) if(gcd(i,k)==1) phi++;
printf("%d\n",phi<<1);
for(int i=0;i<phi;i++) printf("0 ");
printf("%d ",k-1);
for(int i=phi+1;i<(phi<<1);i++) printf("0 ");
printf("1");
return 0;
}