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: none
)
题目大意
从[0,
M − 1]中选出符合
XN mod
M =
Y.的x 不存在输出-1
解题思路
注意,次方很大 会超过int 所以要边做边取模
代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <functional>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
int n,m,y;///998 999 972
int ans[1000];
int pow(int x,int y){
int ans = 1;
for(int i = 1;i<=y;++i){
ans*= x;
ans%= m;///可能会超int,不断取模
}
return ans;
}
int main()
{
scanf("%d%d%d",&n,&m,&y);
int j=0;
for(int i=0;i<m;++i){
// printf("%d %d\n",i,pow(i,n));
if(pow(i,n)%m == y){
ans[j++] = i;
}
}
if(j == 0) printf("-1");
for(int i=0;i<j;++i){
printf("%d",ans[i]);
if(i!=j-1) printf(" ");
}
return 0;
}