codeforces 919E Congruence Equation

E. Congruence Equation
time limit per test
3 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Given an integer x. Your task is to find out how many positive integers n (1 ≤ n ≤ x) satisfy

where a, b, p are all known constants.
Input

The only line contains four integers a, b, p, x (2 ≤ p ≤ 106 + 3, 1 ≤ a, b < p1 ≤ x ≤ 1012). It is guaranteed that p is a prime.

Output

Print a single integer: the number of possible answers n.

Examples
input
2 3 5 8
output
2
input
4 6 7 13
output
1
input
233 233 10007 1
output
1
Note

In the first sample, we can see that n = 2 and n = 8 are possible answers.

 

 

大意:求使上式成立的n的数量(1<=n<=x)

 

题解:看了tag才有了灵感:

 

n*a^n≡b(mod p)

可以变形为

n%p*a^(n%(p-1))≡b(mod p)         ——费马小定理和同余原理

令n%p= i , n%(p-1)=j.

可以倒过来考虑,对于一组使同余方程成立的 i 和 j ,求有多少个n。

 

枚举 j,解方程求出 i ,然后求最小的 n ,易得n+k*(p-1)*p也是合法的解(k为任意自然数)。

解方程求出 i 应该不用讲了,求出最小的n以后算出这组 i , j 贡献的答案数也不难。(细节可以见代码)

最大的问题是如何解出n

中国剩余定理!

想要求n,可以做如下变形:

n≡ i (mod p)

n≡ j (mod p-1)

可以用中国剩余定理来求解。

推荐中国剩余定理讲解:

https://www.cnblogs.com/MashiroSky/p/5918158.html

 

最后一个小细节:p等于2的时候用费马小定理求逆元会出现问题,特判,如果是exgcd求逆元应该不会碰到这个问题。

 1 /*
 2 Welcome Hacking
 3 Wish You High Rating
 4 */
 5 #include<iostream>
 6 #include<cstdio>
 7 #include<cstring>
 8 #include<ctime>
 9 #include<cstdlib>
10 #include<algorithm>
11 #include<cmath>
12 #include<string>
13 using namespace std;
14 int read(){
15     int xx=0,ff=1;char ch=getchar();
16     while(ch>'9'||ch<'0'){if(ch=='-')ff=-1;ch=getchar();}
17     while(ch>='0'&&ch<='9'){xx=(xx<<3)+(xx<<1)+ch-'0';ch=getchar();}
18     return xx*ff;
19 }
20 long long READ(){
21     long long xx=0,ff=1;char ch=getchar();
22     while(ch>'9'||ch<'0'){if(ch=='-')ff=-1;ch=getchar();}
23     while(ch>='0'&&ch<='9'){xx=(xx<<3)+(xx<<1)+ch-'0';ch=getchar();}
24     return xx*ff;
25 }
26 int mypow(int x,int p,int MOD){
27     int re=1;
28     while(p){
29         if(p&1)
30             re=1LL*re*x%MOD;
31         p>>=1;
32         x=1LL*x*x%MOD;
33     }
34     return re;
35 }
36 int a,b,p;
37 long long x,ans;
38 int main(){
39     //freopen("in","r",stdin);
40     a=read(),b=read(),p=read();
41     x=READ();
42     if(p==2){
43         cout<<x/2+(x%2==1)<<endl;
44         return 0;
45     }
46     long long mul=1LL*p*(p-1);
47     for(int i=0;i<=p-2;i++){
48         int y=1LL*b*mypow(mypow(a,i,p),p-2,p)%p;
49         long long temp=(1LL*i*p*mypow(p,p-3,p-1)%mul+1LL*y*(p-1)*mypow(p-1,p-2,p)%mul)%mul;
50         ans+=x/mul+(x%mul>=temp);
51     }
52     cout<<ans<<endl;
53     return 0;
54 }
View Code

 

 

 

 

转载于:https://www.cnblogs.com/lzhAFO/p/8401078.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267642.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抽象工厂模块在开发中的应用

抽象工厂是设计模块中创建型模式的一种&#xff0c;它比起工厂方法模式来说&#xff0c;更加具有一般性&#xff0c;在本模式中会引入一个产品族的概念&#xff0c;就是说,在本模式中抽象产品会有多个&#xff0c;然后用抽象工厂去调用它们&#xff0c;具体怎么去调用由具体工厂…

android 过滤数组中的重复元素,Flutter List数组避免插入重复数据的实现

List具有一定长度存在索引的对象集合(长度为0不存在索引,长度>0存在索引)常见列表1、定长列表默认值null例如:List fixedLengthList new List(2)、List fixedLengthList new List(8)List fixedLengthList new List(2);for(int i0;i<2;i){print("索引为${i}的值${…

[js]jquery里的jsonp实现ajax异源请求

同源请求-jquery <script type"text/javascript" src"http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script><script type"text/javascript">$.ajax({url: "data.txt",type: "get",dataType…

android listview remove 动画,给Android ListView添加删除item动画

给Android ListView添加删除item动画给listview删除一个item的时候加上一个折叠动画&#xff0c;感觉效果会好一点。步骤是当删除一个view&#xff0c;先用动画把view的高度改变&#xff0c;看上去就是折叠的效果。当动画完成的时候&#xff0c;再真正把item移除。private void…

Css 选择器 算法 规则

首先上图 css 命令在读取时是按照其优先级的高低的先后顺序来解读的&#xff0c;当优先级相同时是按照其css命令写的先后顺序来读取的&#xff0c;即后面的css覆盖&#xff08;前后css属性设置 不同时&#xff09;或继承&#xff08;前后css属性设置相同或后面未设置该css属性时…

鸡尾酒排序算法c语言,[golang] 数据结构-鸡尾酒排序

吐个槽又是一个不正经取名的排序算法。真要说和鸡尾酒间的关系&#xff0c;大概就是想喝到鸡尾酒(得到排序好的队列)就要摇晃酒杯让不同的成分混合均匀(向两个方向冒泡排序)原理鸡尾酒排序(Cocktail Sort)是冒泡排序的一种优化算法。原本的冒泡排序只能在一轮中挑出一个值移动到…

ie6 div height bug css注意点(转)

所有浏览器的定位都大同小异&#xff0c;在各个浏览器兼容性问题&#xff0c;要了解各个浏览器的定位区别就可以了。 比如&#xff0c;当用float浮动时&#xff0c;同时设置margin或padding在IE6中会是双倍的值。即你设置为margin:10px;那么在IE6里就相当于margin:20px; 出现这…

Python算法——二叉树

一、二叉树 from collections import dequeclass BiTreeNode:def __init__(self, data):self.data dataself.lchild Noneself.rchild Nonea BiTreeNode(A) b BiTreeNode(B) c BiTreeNode(C) d BiTreeNode(D) e BiTreeNode(E) f BiTreeNode(F) g BiTreeNode(G)e.lchil…

艾伟_转载:.NET 4.0新特性-- Corrupted State Exceptions

作为程序员&#xff0c;我想很多人应该都有过跟异常打交道的经历。而且相信也有很多人也都写过catch(Exception e){//blabla}这种把所有未知异常一股脑儿捕获并处理掉的代码吧。不管是为敷衍客户也好&#xff0c;让程序继续运行以避免糟糕的用户体验也罢&#xff0c;在微软眼中…

android sdk 2.9.5.0,如何找到问题Android SDK 3.0错误:(9,5)错误:资源android:attr/colorError未找到...

当我做一个make时如何找到此错误的问题我收到此错误消息&#xff1a;错误&#xff1a;(9,5)错误&#xff1a;找不到资源android&#xff1a;attr / colorError奇怪的是我有2个build.gradle文件&#xff1a;这里是我的build.gradle(Project&#xff1a;Projectname)文件&#xf…

c# 读取 txt 文件中数据(int)

今天在学图的算法做测试是&#xff0c;需要读取文本文件中的点坐标&#xff0c;本来很简单的事情&#xff0c;折腾了半天&#xff0c;记录一下找到的一种简单粗暴的解决方法&#xff0c;以便以后查看。 第一种方法 &#xff1a; StringReader string line "";using …

艾伟_转载:使用Lambda表达式编写递归函数

前言 著名的牛顿同学曾经说过&#xff1a;如果说我比别人看得更远些,那是因为我站在了巨人的肩上. 原文&#xff1a;If I have been able to see further, it was only because I stood on the shoulders of giants. Whats Lambda表达式? 请参考msdn&#xff1a;Lambda 表达式…

android 模拟器read-only file system,WAC启动Android模拟器 transfer error: Read-only file system错误解决方法...

这两天在用WAC SDK开发Widget时&#xff0c;在启动Android模拟器时Eclipse的Consle出现如下错误&#xff1a;[2011-11-27 22:08:49 - ddms]transfer error: Read-only file system然后Widget无法安装和执行&#xff01;在参考了官方论坛上的相同问题的一个帖子后&#xff0c;也…

spring5.0.2中文官网文档pdf

下载地址&#xff1a;网盘下载Spring是一个开放源代码的设计层面框架&#xff0c;他解决的是业务逻辑层和其他各层的松耦合问题&#xff0c;因此它将面向接口的编程思想贯穿整个系统应用。本参考指南提供了有关spring5.0.2的详细信息。它全面的介绍了Spring的所有的功能&#x…

IT销售素质 -- 自信进取

到外企面试过销售职位的人都知道“aggressive ”这个英文词。这个词的意思是“侵略的&#xff0c;爱寻衅的&#xff0c;敢做敢为的&#xff0c;有进取心的”。经理们希望销售们都够“aggressive”&#xff0c;意思就是要他们个个都积极进取&#xff0c;主动进攻。 销售是一…

android判断sd u盘,[Android Framework]获取U盘 SD 状态

Android 4.4 SD 和 U盘 的状态通过获取StorageVolume 类来判断 是sd还是U盘。我们来看一下这个类package android.os.storage;import android.content.Context;import android.os.Parcel;import android.os.Parcelable;import android.os.UserHandle;import com.android.intern…

A1032. 画三角形2

问题描述 找出下面给出图形的规律&#xff0c;给出n&#xff0c;画一个n行的对应图形。ABABCBABCDCBABCD输入格式输入包含一个数n。1<n<20输出格式输出与上图类似n行的图形。样例输入4样例输出ABABCBABCDCBABCDpackage www.tsinsen.com;import java.util.Scanner;public …

分析java中文乱码的原因

在java开发中都能遇到java中文乱码的情况&#xff0c;怎样才能够恰当地选择汉字编码方式并正确地处理汉字的编码呢?希望通过下面的总结的java中文乱码解决方法对遇到过此类问题的朋友有所帮助。 首先&#xff0c;要想解决java中文乱码问题就有必要了解一下什么是字符&#xff…

html中写随机数,为HTML生成一个随机数

你的问题是相当含糊&#xff0c;你需要什么&#xff0c;但这里是产生两个变量之间的随机数&#xff0c;然后一个Javascript的解决方案设置一个内容是&#xff1a;JS&#xff1a;var link document.getElementById(getNumber); // Gets the linklink.onclick getNumber; // Ru…

51Nod1469 淋漓尽致子串

首先&#xff0c;我们来定义一下淋漓尽致子串。 1.令原串为S。2.设子串的长度为len&#xff0c;在原串S中出现的次数为k&#xff0c;令其出现的位置为p1&#xff0c; p2&#xff0c; ....pk(即这个子串在原串中[pi&#xff0c;pi len - 1]中出现)。 3.若k1&#xff0c;则该子串…