1110. Power
Time limit: 0.5 second
Memory limit: 64 MB
Memory limit: 64 MB
You are given the whole numbers
N,
M and
Y. Write a program that will find all whole numbers
X in the interval [0,
M − 1] such that
XN mod
M =
Y.
Input
The input contains a single line with
N,
M and
Y (0 <
N < 999, 1 <
M < 999, 0 <
Y < 999) separated with one space.
Output
Output all numbers
X separated with space on one line. The numbers must be written in ascending order. If no such numbers exist then output −1.
Sample
input | output |
---|---|
2 6 4 | 2 4 |
Problem Source: Bulgarian National Olympiad Day #1
Tags:
)
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
int m;
int fast_mi(int a,int k)
{
int res=1;
while(k)
{
if(k&1)
res=res*a%m;
a=a*a%m;
k>>=1;
}
return res;
}
int main()
{
int n,y,i;
int a[1000];
while(cin>>n>>m>>y)
{
int flag=0;
memset(a,0,sizeof(a));
int len=0;
for(i=0; i<=m-1; i++)
{
if(fast_mi(i,n)%m==y)
{
flag=1;
a[len++]=i;
}
}
if(flag)
{
for(i=0; i<len; i++)
{
if(!i)
cout<<a[i];
else
cout<<" "<<a[i];
}
cout<<endl;
}
else
cout<<-1<<endl;
}
return 0;
}