#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
Написали бы язык программирования. Вот на java. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;
public class znanie { public static void main(String[] args) throws IOException { BufferedReader reader=new BufferedReader(new InputStreamReader(System.in)); long A=Long.parseLong(reader.readLine()); long B=Long.parseLong(reader.readLine()); if((A<0)||(B<0)){ System.exit(0); } long sum=0; for (long i = A; i <= B; i++) { if((i%5==0)||(i%13==0)){ sum=sum+i; } } System.out.println(sum); } }
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota
Оформи подписку