Problem
It is well-known that the equation: has no positive solution for . But what if we consider solution over a finite field. Now, the task you are given is related to that:
Given a prime , you are asked to count the number of positive integers doesn't exceed s.t. modulo equation has solution .
Input Format
A line contains two space-separated integers as described above.
Output Format
Output answer in a single line.
Constraints
Time Limit: 1
Memory Limit: 256
Source Limit:
Explanation
Let's enumerate all possible values of :
- there is a solution .
- there is no solution.
- this is a solution .
- there is no solution.
So, answer is .
Code(C++):-
- #include <bits/stdc++.h>
- #define ll long long
- #define pii std::pair<int,int>
- #define mp std::make_pair
- #define fi first
- #define se second
- #define SZ(x) (int)(x).size()
- #define pb push_back
- template<class T>inline void chkmax(T &x, const T &y) {if(x < y) x = y;}
- template<class T>inline void chkmin(T &x, const T &y) {if(x > y) x = y;}
- template<class T>
- inline void read(T &x) {
- char c;int f = 1;x = 0;
- while(((c=getchar()) < '0' || c > '9') && c != '-');
- if(c == '-') f = -1;else x = c-'0';
- while((c=getchar()) >= '0' && c <= '9') x = x*10+c-'0';
- x *= f;
- }
- static int outn;
- static char out[(int)2e7];
- template<class T>
- inline void write(T x) {
- if(x < 0) out[outn++] = '-', x = -x;
- if(x) {
- static int tmpn;
- static char tmp[20];
- tmpn = 0;
- while(x) tmp[tmpn++] = x%10+'0', x /= 10;
- while(tmpn) out[outn++] = tmp[--tmpn];
- }
- else out[outn++] = '0';
- }
- const int P = 1e6;
- int p;
- ll L;
- int fac[1000], facn;
- int rt;
- int ocr[P + 9];
- bool valid[P + 9];
- int pre[P + 9];
- int fpm(int a, int b, int mod) {
- int ret = 1;
- while(b) {
- if(b & 1) {
- ret = (ll)ret * a % mod;
- }
- a = (ll)a * a % mod;
- b >>= 1;
- }
- return ret;
- }
- int gcd(int a, int b) {
- return b ? gcd(b, a % b) : a;
- }
- void findroot() {
- for(int i = 2; ; ++i) {
- bool fl = true;
- for(int j = 2; j <= facn; ++j) {
- if(fpm(i, (p - 1) / fac[j], p) == 1) {
- fl = false;
- break;
- }
- }
- if(fl) {
- rt = i;
- break;
- }
- }
- }
- int main() {
- read(p), read(L);
- for(int d = 1; d * d < p; ++d) {
- if((p - 1) % d == 0) {
- fac[++facn] = d;
- if(d * d != p - 1) {
- fac[++facn] = (p - 1) / d;
- }
- }
- }
- findroot();
- for(int i = 1; i <= facn; ++i) {
- int d = fac[i], base = fpm(rt, d, p);
- for(int k = 0, r_k = 1; k < p - 1; k += d, r_k = (ll)r_k * base % p) {
- ocr[r_k] = i;
- if(ocr[r_k - 1] == i or ocr[r_k + 1] == i) {
- valid[d] = true;
- break;
- }
- }
- }
- for(int i = 1; i < p; ++i) {
- pre[i] = pre[i - 1] + valid[gcd(i, p - 1)];
- }
- ll ans = 0;
- ans = L / (p - 1) * pre[p - 1];
- ans += pre[L % (p - 1)];
- std::cout << ans << std::endl;
- return 0;
- }
Recommended Post :-
HCL Coding Questions:-
Capgemini Coding Questions:-
iMocha coding Questions:-
Tech Mahindra coding questions:-
Unthinkable Solutions coding questions:-
- Swap the adjacent characters of the string
- Double the vowel characters in the string
- Character with their frequency
- Program to find the closest value
Must check this:-
Companies interview:-
- Swap adjacent characters
- Double the vowel characters
- Check valid parenthesis
- Print the characters with their frequencies
- Find closest value
- Word Count
- Program of CaesarCipher
- Program to find the perfect city
- Annual Day | Tech Mahindra coding question
- Find the number of pairs in the array whose sum is equal to a given target.
Full C course:-
Key points:-
- How to set limit in the floating value in python
- What is boolean data type
- How to print any character without using format specifier
- How to check that given number is power of 2 or not
- How to fix limit in double and floating numbers after dot (.) in c++
- How to print a double or floating point number in scientific notation and fixed notation
- How to take input a string in c
- How to reduce the execution time of program in c++.
Cracking the coding interview:-
Array and string:-
Tree and graph:-
Hackerearth Problems:-
- Very Cool numbers | Hacker earth solution
- Vowel Recognition | Hackerearth practice problem solution
- Birthday party | Hacker earth solution
- Most frequent | hacker earth problem solution
- program to find symetric difference of two sets
- cost of balloons | Hacker earth problem solution
- Chacha o chacha | hacker earth problem solution
- jadu and dna | hacker earth solution
- Bricks game | hacker earth problem
- Anti-Palindrome strings | hacker earth solution
- connected components in the graph | hacker earth data structure
- odd one out || hacker earth problem solution
- Minimum addition | Hackerearth Practice problem
- The magical mountain | Hackerearth Practice problem
- The first overtake | Hackerearth Practice problem
Hackerrank Problems:-
- Playing With Characters | Hackerrank practice problem solution
- Sum and Difference of Two Numbers | hackerrank practice problem solution
- Functions in C | hackerrank practice problem solution
- Pointers in C | hackerrank practice problem solution
- Conditional Statements in C | Hackerrank practice problem solution
- For Loop in C | hackerrank practice problem solution
- Sum of Digits of a Five Digit Number | hackerrank practice problem solution
- 1D Arrays in C | hackerrank practice problem solution
- Array Reversal | hackerrank practice problem solution
- Printing Tokens | hackerrank practice problem solution
- Digit Frequency | hackerrank practice problem solution
- Calculate the Nth term | hackerrank practice problem solution
Data structure:-
- Program to find cycle in the graph
- Implementation of singly link list
- Implementation of queue by using link list
- Algorithm of quick sort
- stack by using link list
- program to find preorder post order and inorder of the binary search tree
- Minimum weight of spanning tree
- Preorder, inorder and post order traversal of the tree
MCQs:-
0 Comments