f(x)%(p^a) (p是素数) 求解

《信息安全数学基础》 陈恭亮

第三章练习题第20题,懒,然后写了个程序,f(x)=x^4+7x+4

2015.10.26

哈哈哈

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;

long long int pro(long long int x,long long int y){
    long long int ans=1;

    for(int i=1;i<=y;i++){
        ans=ans*x;
    }

    return ans;
}

long long int f(long long int x){
    return pro(x,4)+7*x+4;
}

long long int fd(long long int x){
    return 4*pro(x,3)+7;
}

void exgcd(long long int *a,long long int *b,long long int x,long long int y){
    if(y==0){
        *a=1;
        *b=1;
    }
    else{
        long long int a1,b1;

        exgcd(&a1,&b1,y,x%y);
        *a=b1;
        *b=a1-x/y*b1;
    }

    return;
}

long long int inv(long long int x,long long int y){
    long long int a,b;

    exgcd(&a,&b,x,y);

    return (a%y+y)%y;
}

int main(){
    long long int m=3;
    long long int nowm=9;
    long long int x=1;

    for(int i=1;i<5;i++){
        long long int temp1=(-f(x)/(nowm/m)%m+m)%m;
        long long int temp3=fd(x);
        long long int temp2=inv(temp3,m);
        x=temp1*temp2%m*nowm/m+x;
        nowm*=m;
        //printf("%lld %lld %lld %lld\n",x,temp1,temp2,temp3);
    }

    printf("%lld\n",x);
}


posted @ 2015-10-12 19:44  buzhidaohahaha  阅读(181)  评论(0编辑  收藏  举报