C. Os últimos três
Link do título: https://ac.nowcoder.com/acm/contest/9986/C
Descrição do título:
Niuniu acabou de estudar o índice recentemente, ele entendeu que 2 ^ 2 = 4, 3 ^ 3 = 27 ...
No entanto, ele agora quer saber: Quais são os três últimos dígitos de 5 ^ n?
Insira uma descrição:
Existem vários conjuntos de dados de entrada.
Insira um número n para cada grupo de dados, o que significa expoente.
Descrição de saída:
Produza os últimos três dígitos de 5 ^ n.
Exemplo 1:
Entrada
1
3
5
Saída
005
125
125
Nota:
Para dados 100%, 0 <= n <= 1e9.
O número de grupos de dados t <= 10 ^ 6.
Ideias para resolução de problemas:
Ⅰ Potência rápida: Deixe módulo = 1000 e use a potência rápida diretamente.
Ⅱ. Regras de descoberta: julgamento especial em n <3 e discussão de paridade em n> = 3.
código mostrado abaixo:
Ⅰ: Potência rápida
#include <iostream>
using namespace std;
int qsm(int a,int b,int c){
int res=1;
while(b){
if(b&1)
res=(res*a)%c;
a=(a*a)%c;
b>>=1;
}
return res;
}
int main() {
int n;
while(cin>>n){
int ans=qsm(5,n,1000);
printf("%03d\n",ans);
}
return 0;
}
Ⅱ: Encontre a lei
#include <iostream>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
if (n==0) cout<<"001"<<endl;
else if (n==1) cout<<"005"<<endl;
else if (n==2) cout<<"025"<<endl;
else if (n%2==1)cout<<"125"<<endl;
else cout<<"625"<<endl;
}
return 0;
}