CF1028H.Make Square

普及/提高-

通过率:0%

时间限制:7.00s

内存限制:1024MB

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

We call an array b1,b2,,bmb_1, b_2, \ldots, b_m good, if there exist two indices i<ji \lt j such that bibjb_i \cdot b_j is a perfect square.

Given an array b1,b2,,bmb_1, b_2, \ldots, b_m, in one action you can perform one of the following:

  • multiply any element bib_i by any prime pp;
  • divide any element bib_i by prime pp, if bib_i is divisible by pp.

Let f(b1,b2,,bm)f(b_1, b_2, \ldots, b_m) be the minimum number of actions needed to make the array bb good.

You are given an array of nn integers a1,a2,,ana_1, a_2, \ldots, a_n and qq queries of the form li,ril_i, r_i. For each query output f(ali,ali+1,,ari)f(a_{l_i}, a_{l_i + 1}, \ldots, a_{r_i}).

我们称一个数组 b1,b2,,bmb_1, b_2, \ldots, b_m 是“好的”,如果存在两个下标 i<ji \lt j,使得 bibjb_i \cdot b_j 是一个完全平方数

给定一个数组 b1,b2,,bmb_1, b_2, \ldots, b_m,在一次操作中,你可以执行以下两种操作之一:

  • 将任意元素 bib_i 乘以任意一个质数 pp
  • bib_i 能被质数 pp 整除,则可将 bib_i 除以质数 pp

f(b1,b2,,bm)f(b_1, b_2, \ldots, b_m) 表示使数组 bb 变为“好的”所需的最少操作次数。

现给你一个包含 nn 个整数的数组 a1,a2,,ana_1, a_2, \ldots, a_n,以及 qq 个形如 li,ril_i, r_i 的查询。对每个查询,请输出 f(ali,ali+1,,ari)f(a_{l_i}, a_{l_i + 1}, \ldots, a_{r_i})

输入格式

The first line contains two integers nn and qq (2n1945982 \le n \le 194\,598, 1q10496581 \le q \le 1\,049\,658) — the length of the array and the number of queries.

The second line contains nn integers a1,a2,,ana_1, a_2, \ldots, a_n (1ai50321071 \le a_i \le 5\,032\,107) — the elements of the array.

Each of the next qq lines contains two integers lil_i and rir_i (1li<rin1 \le l_i \lt r_i \le n) — the parameters of a query.

第一行包含两个整数 nnqq2n1945982 \le n \le 194\,5981q10496581 \le q \le 1\,049\,658)—— 分别表示数组的长度和查询次数。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_n1ai50321071 \le a_i \le 5\,032\,107)—— 表示数组的元素。

接下来的 qq 行中,每行包含两个整数 lil_irir_i1li<rin1 \le l_i \lt r_i \le n)—— 表示一次查询的参数。

输出格式

Output qq lines — the answers for each query in the order they are given in the input.

输出 qq 行——按输入中给出的顺序,依次输出每个查询的答案。

输入输出样例

  • 输入#1

    10 10
    34 37 28 16 44 36 43 50 22 13
    1 3
    4 8
    6 10
    9 10
    3 10
    8 9
    5 6
    1 4
    1 7
    2 6

    输出#1

    2
    0
    1
    3
    0
    1
    1
    1
    0
    0

说明/提示

In the first query of the first sample you can multiply second number by 7 to get 259 and multiply the third one by 37 to get 1036. Then a2a3=268324=5182a_2 \cdot a_3 = 268\,324 = 518^2.

In the second query subarray is already good because a4a6=242a_4 \cdot a_6 = 24^2.

In the third query you can divide 50 by 2 to get 25. Then a6a8=302a_6 \cdot a_8 = 30^2.

在第一个样例的第一个查询中,你可以将第二个数乘以 77 得到 259259,并将第三个数乘以 3737 得到 10361036。此时 a2a3=268324=5182a_2 \cdot a_3 = 268\,324 = 518^2

在第二个查询中,子数组本身已满足条件,因为 a4a6=242a_4 \cdot a_6 = 24^2

在第三个查询中,你可以将 5050 除以 22 得到 2525。此时 a6a8=302a_6 \cdot a_8 = 30^2

输入解题思路,AI测评打分。不知道怎么写?

首页