题意 : 给出数 x (1 ≤ x ≤ 10^12 ),要求求出所有满足 1 ≤ n ≤ x 的 n 有多少个是满足 n*a^n  = b ( mod p )

分析 :

首先 x 的范围太大了,所以使用枚举进行答案的查找是行不通的

观察给出的同余恒等式,发现这个次方数 n 毫无规律

自然想到化成费马小定理的形式

令 n = i*(p-1)+j

式子化成

根据费马小定理不难证明(猜???)周期为 p*(p-1)

==> 来自 Tutorial,反正我是不知道怎么证,貌似评论下面有大神用欧拉函数来证

有一个点要提前说一下,我们观察等式中间部分的指数部分

发现如果 j == 0 的话那么在模 p-1 意义下 n 就会变成 0

但是题目给出的范围 n 是不允许为 0 的,所以等等解法里面会把 j == 0 用 j == p-1 代替

然后将刚刚得出的化简结果代回题目原式,于是就可以枚举 j (范围是 1~p-1)来得到 i

此时的得出来的 i 和 j 都是刚刚好满足原式的,于是可得满足原式的最小 n

因为周期是 p*(p-1) 所以后面更大的满足题意的 n 应该为 n+k*[p*(p-1)],而这里我们不加上周期,故得最小

又因为得知周期为 p*(p-1)所以答案的贡献应该为 ( x - n ) / [p*(p-1)] ==> x > n

#include<bits/stdc++.h>
#define LL long long
using namespace std;

LL pow_mod(LL a, LL b, LL p)
{
    LL ret = ;
    while(b){
        ) ret = (ret * a) % p;
        a = (a * a) % p;
        b >>= ;
    }
    return ret;
}

LL Fermat(LL a, LL p)
{ , p); }

int main(void)
{
    LL a, b, x, p;
    while(~scanf("%I64d %I64d %I64d %I64d", &a, &b, &p, &x)){
        LL ans = ;
        ; j<=p-; j++){
            LL y = b * Fermat(pow_mod(a, j, p), p) % p;
            LL Min_N = (p-) * ((j - y + p)%p) + j;
            if(Min_N > x) continue;
            ans += (x - Min_N) / (p*(p-)) + 1LL;
        }
        printf("%I64d\n", ans);
    }
    ;
}

Codeforces 919E Congruence Equation ( 数论 && 费马小定理 )的更多相关文章

  1. 数论 --- 费马小定理 + 快速幂 HDU 4704 Sum

    Sum Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=4704 Mean: 给定一个大整数N,求1到N中每个数的因式分解个数的 ...

  2. Codeforces.919E.Congruence Equation(同余 费马小定理)

    题目链接 \(Description\) 给定a,b,x,p,求[1,x]中满足n*a^n ≡b (mod p) 的n的个数.\(1<=a,b<p\), \(p<=1e6+3\), ...

  3. 数论初步(费马小定理) - Happy 2004

    Description Consider a positive integer X,and let S be the sum of all positive integer divisors of 2 ...

  4. CodeForces 300C Beautiful Numbers(乘法逆元/费马小定理+组合数公式+高速幂)

    C. Beautiful Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  5. codeforces div2_604 E. Beautiful Mirrors(期望+费马小定理)

    题目链接:https://codeforces.com/contest/1265/problem/E 题意:有n面镜子,你现从第一面镜子开始询问,每次问镜子"今天我是否美丽",每天 ...

  6. [Codeforces 919E]Congruence Equation

    Description 题库链接 求满足 \[n\cdot a^n\equiv b \pmod{p}\] 的 \(n\) 的个数, \(1\leq n\leq x\) , \(a,b,p,x\) 均已 ...

  7. poj 1845 【数论:逆元,二分(乘法),拓展欧几里得,费马小定理】

    POJ 1845 题意不说了,网上一大堆.此题做了一天,必须要整理一下了. 刚开始用费马小定理做,WA.(poj敢说我代码WA???)(以下代码其实都不严谨,按照数据要求A是可以等于0的,那么结果自然 ...

  8. 【poj 1284】Primitive Roots(数论--欧拉函数 求原根个数){费马小定理、欧拉定理}

    题意:求奇质数 P 的原根个数.若 x 是 P 的原根,那么 x^k (k=1~p-1) 模 P 为1~p-1,且互不相同. (3≤ P<65536) 解法:有费马小定理:若 p 是质数,x^( ...

  9. 逆元 exgcd 费马小定理 中国剩余定理的理解和证明

    一.除法取模逆元 如果我们要通过一个前面取过模的式子递推出其他要取模的式子,而递推式里又存在除法 那么一个很尴尬的事情出现了,假如a[i-1]=100%31=7 a[i]=(a[i-1]/2)%31 ...

随机推荐

  1. form 校验

    import refrom django.forms import Formfrom django.forms import widgetsfrom django.forms import field ...

  2. python 并发编程 多线程 Thread对象的其他属性或方法

    介绍 Thread实例对象的方法 # isAlive(): 返回线程是否活动的. # getName(): 返回线程名. # setName(): 设置线程名. threading模块提供的一些方法: ...

  3. Java类初始化和实例初始化过程

    1.类初始化过程 一个类要创建实例需要先加载并初始化该类 main方法所在的类需要先加载和初始化 一个子类要初始化需要先初始化父类 一个类初始化就是执行<client>()方法(编译器生成 ...

  4. 通过node指令自动创建一个package.json文件,并封装发布使用

    通过node指令自动创建一个package.json文件,并封装发布使用:https://blog.csdn.net/scu_cindy/article/details/78208268

  5. js实现回车键搜索

    前端关键代码: <input type="text" onkeydown="entersearch()" class="form-control ...

  6. 文件的三种打开方式及with管理文件上下文

    文件的三种打开方式及with管理文件上下文 一.文件的三种打开方式 1.1 只读 f = open(r'D:\pycharm\yjy\上海python学习\456.txt','r',encoding= ...

  7. 史上最全的大厂Mysql面试题在这里

    1.MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联: 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中: 从:io线程——在使用star ...

  8. linux相关命令大全......持续更新

    启动项目8080端口被占用,然而老久没玩Linux,命令忘光了,杀死进程都不记得了. 决定整理一波吧....... Linux: sudo强制执行,不在root用户下时使用. top 相当于windo ...

  9. git上传文件夹报错: ! [rejected] master -> master (fetch first) error: failed to push some refs to 'https://github.com/taminachen/rjxm.git' hint: Updates were rejected because the remote contains work

    使用git上传本地文件夹到远程仓库,使用如下命令:git push -u origin master时报错 原因是在GitHub创建仓库时创建了readme文件,但是本地没有这个文件,造成本地目录与远 ...

  10. laravel5.8 表单验证

    'name' => 'required|unique:posts|max:255', // posts 表名 源码  vendor\laravel\framework\src\Illuminat ...