#include<stdio.h> int main(){ int div[10001]; int i,d,n,x; long int p = 1;
for(i = 0; i < 10000; i++) div[i] = 1;
scanf("%d",&n); for(i = 0; i < n; i++){ scanf("%d",&x); d = 2; while(d <= x){ while(x%d == 0){ x /= d; div[d]++; } d++; } }
for(i = 0; i < 10000; i++) p *= div[i]; printf("%ld",p); return 0; }
/* Небольшое пояснение: Идея решения заключается в том, что любой делитель результата представим как произведение простых чисел в определенных степенях. Тогда набор этих степеней однозначно определяет соответствующий делитель. Максимальная степень, с которой может быть взято простое число, является суммой степеней, с которыми оно входит в множители. Для простоты массив вхождений делителей задан от 0 до 10000, но т.к. перебор делителей множителей идет по возрастанию, учтены будут только простые делители.
Пример: 10 * 8 * 9 = 720
10 = 2^1*5^2 8 = 2^3 9 = 3^2
Т.е. число 2 входит в произведение в четвертой степени, 3 - во второй, 5 - в первой.
Значит любой делитель числа 720 представим (единственным образом) в виде 2^(d2) * 3^(d3) * 5^(d5), где d2 = 0..4, d3 = 0..2, d5 = 0..1
Дан массив, содержащий 70 целых чисел. Опишите на одном из языков программирования алгоритм,
позволяющий найти и вывести наименьшее содержащееся в массиве положительное число, десятичная
запись которого оканчивается цифрой 7. Гарантируется, что в массиве есть хотя бы один
положительный элемент, десятичная запись которого оканчивается цифрой 7. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но
int main(){
int div[10001];
int i,d,n,x;
long int p = 1;
for(i = 0; i < 10000; i++)
div[i] = 1;
scanf("%d",&n);
for(i = 0; i < n; i++){
scanf("%d",&x);
d = 2;
while(d <= x){
while(x%d == 0){
x /= d;
div[d]++;
}
d++;
}
}
for(i = 0; i < 10000; i++)
p *= div[i];
printf("%ld",p);
return 0;
}
/*
Небольшое пояснение:
Идея решения заключается в том, что любой делитель результата представим как произведение простых чисел в определенных степенях. Тогда набор этих степеней однозначно определяет соответствующий делитель. Максимальная степень, с которой может быть взято простое число, является суммой степеней, с которыми оно входит в множители.
Для простоты массив вхождений делителей задан от 0 до 10000, но т.к. перебор делителей множителей идет по возрастанию, учтены будут только простые делители.
Пример:
10 * 8 * 9 = 720
10 = 2^1*5^2
8 = 2^3
9 = 3^2
Т.е. число 2 входит в произведение в четвертой степени, 3 - во второй, 5 - в первой.
Значит любой делитель числа 720 представим (единственным образом) в виде
2^(d2) * 3^(d3) * 5^(d5), где d2 = 0..4, d3 = 0..2, d5 = 0..1
Например, 1 = 2^0 * 3^0 * 5^0, 720 = 2^4 * 3^2 * 5^1
Есть выбрать выбрать d3 и выбрать d5 --> всего 5 * 3 * 2 = 30 возможных наборов --> 30 делителей у числа 720
(если какое-то число не появляется среди делителей множителей, то его можно взять только одним со степенью 0 - что не влияет на ответ)
*/
Дан массив, содержащий 70 целых чисел. Опишите на одном из языков программирования алгоритм,
позволяющий найти и вывести наименьшее содержащееся в массиве положительное число, десятичная
запись которого оканчивается цифрой 7. Гарантируется, что в массиве есть хотя бы один
положительный элемент, десятичная запись которого оканчивается цифрой 7. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но
разрешается не использовать часть из них.
1
2
3
4
5
6
7
8
9
const N=70;
var
a: array [1..N] of integer;
i, j, m: integer;
begin
for i:=1 to N do
что-то подобное?