LOJ #525. 「LibreOJ β Round #4」多项式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sunshiness_s/article/details/81335683

LOJ #525. 「LibreOJ β Round #4」多项式

题意

给定一个正整数 k ,你需要寻找一个系数均为 0 k 1 之间的非零多项式 f ( x ) ,满足对于任意整数 x 均有 f ( x ) 0 ( m o d k )


题解

我们知道欧拉定理是:若 a 与 n 互质,则 a ϕ ( n ) 1 ( m o d n )

这里我们提出扩展欧拉定理:任意正整数 x ,都有 n x n x ( m o d φ ( p ) ) + φ ( p ) ( m o d p )

所以我们可以得到 n x + φ ( p ) n x 0 ( m o d p )

我们可用令 x = φ ( p ) 就可以得到一个正确式子

然而题目要求系数不能为负数

所以我们给式子加上一个 k n x

也就可以得到 n φ ( p ) + φ ( p ) + ( k 1 ) n φ ( p ) 0 ( m o d p )

然后求一个 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;
}

猜你喜欢

转载自blog.csdn.net/sunshiness_s/article/details/81335683
今日推荐