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
input | output |
---|---|
2 6 4 |
2 4 |
Problem Source: Bulgarian National Olympiad Day #1
Tags: (
题意:是否存在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; }
时间: 2024-10-14 02:29:07