Пользователь использует компьютерную систему, в которой по введенному паролю вычисляется и хранится хеш-значение. хэш-значение пароля вычисляется функцией gethash (см. листинг).
политика безопасности системы требует, чтобы пароль содержал не более шести символов и состоял только из букв латинского алфавита в верхнем регистре в кодировке ascii.
/* входные параметры:
pwd – строка пароля
hash - переменная, в которой будет содержаться хеш
возвращаемое значение:
false – пароль не соотвествует правилам системы;
true - пароль соотвествует правилам системы;
int hash – хеш пароля (целое число)
*/
bool gethash( char const *pwd, int *hash ) {
// длина пароля
int n = strlen(pwd);
// проверка пароля на длину
if(n > 6)
return false;
// проверка пароля на содержание только букв верхнего регистра
for(int i = 0; i < n; i++)
if( pwd[i] < 'a' || pwd[i] > 'z')
return false;
//вычисление хеша
*hash = 0;
for(int i = 0; i < n; i++)
*hash += (pwd[i] - 'a' + 1);
return true;
}
у какого пароля хеш-значение будет меньше 65?
если вам надо перевести его в какую-нибудь систему счисления, то нужно делить это число на номер системы, так если нужно перевести число 137 в ДВОичную ,то делим на 2 до тех пор, пока остатотк от деления не равен 1.(если в ТРОичную то на 3 и т.д.).
начнём:
137 / 2 = 68 выписываем остаток (1)
68 / 2 = 34 выписываем остаток (0)
34 / 2 = 17 выписываем остаток (0)
17 / 2 = 8 выписываем остаток (1)
8 / 2 = 4 выписываем остаток (0)
4 / 2 = 2 выписываем остаток (0)
2 / 2 = 1 <== на этой единице заканчиваем деление, далее снизу вверх выписываем получившееся число : 001001;
ответ: 001001
var i,j,n:longint;
f:boolean;
begin
writeln('Введите число');
readln(n);
if n<2 then writeln('Простых делителей нет')
else
begin
write('Число ',n,' ','= 1');
for i:=2 to n do
if n mod i=0 then
begin
f:=true;
j:=2;
while f and(j<=round(sqrt(i/2)))do
begin
if i mod j=0 then f:=false
else j:=j+1;
end;
if f then write('*',i);
end;
end;
end.
Тестовое решение:
Введите число
2345
Число 2345 = 1*5*7*35*67