您的位置:首页 > 其它

ural 1110 Power

2015-04-28 22:09 302 查看


1110. Power

Time limit: 0.5 second

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

inputoutput
2 6 4

2 4

Problem Source: Bulgarian National Olympiad Day #1

Tags: (

show tags for all problems
)

题意:是否存在x,使得x的n次方%m等于y,存在的话输出所有的x。不存在输出负一。
水题,跑个快速幂。
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: