Ressourcenlimit
Speicherlimit: 256,0 MB C/C++-Zeitlimit: 1,0 s Java-Zeitlimit: 3,0 s Python-Zeitlimit: 5,0 s
Problembeschreibung
Gegeben N, A0, B0, finden Sie alle Paare (A, B), so dass wenn A0 * x + B0 * y durch N teilbar ist, dann ist auch A * x + B * y durch N teilbar.
Eingabeformat
Geben Sie nacheinander drei Ganzzahlen N, A0, B0 ein, was wie im Titel beschrieben bedeutet.
Ausgabeformat
Die erste Zeile ist eine Ganzzahl m, die Anzahl aller Paare.
In den nächsten m Zeilen hat jede Zeile zwei ganze Zahlen A, B (beide Zahlen liegen zwischen [0, n)), die Bedeutung ist wie im Titel beschrieben. Sortieren Sie die Ausgabe nach A von klein nach groß. Wenn Sie auf das gleiche Zahlenpaar von A stoßen, sortieren Sie die Ausgabe nach B von klein nach groß und geben Sie sie aus.
Beispieleingabe
3
1 2
Beispielausgabe
3
0 0
1 2
2 1
Datengröße und Konvention
0<N≤100000, 0≤A, B<N.
Antwort:
#include<iostream>
using namespace std;
typedef long long ll;
ll n,m,a0,b0,num=0;
int main(){
pair<int,int> result[10001];
int n,a0,b0;
cin >> n>>a0>>b0;
int i = a0%=n;
int j = b0%=n;
do{
result[num++] = make_pair(i,j);
i = (i+a0)%n;
j = (j+b0)%n;
}while(i!=a0||j!=b0);
cout<<num<<endl;
while(num){
num--;
cout<<result[num].first<<" "<<result[num].second<<endl;
}
}