"Blue Bridge Cup" Número cuadrado perfecto (Java)

Pregunta H

imagen-20220331154847461imagen-20220331154920485imagen-20220331154931726

Enumeración violenta, TLE, después de 7 ejemplos, probablemente pueda obtener una puntuación de 50% ~ 70%.

import java.util.Scanner;

public class Main {
    
    
    public static void main(String[] args) {
    
    
        Scanner sc = new Scanner(System.in);
        long n = sc.nextLong();
        for (long i = 1; i <= n; i++) {
    
    
            // 将这个数开根号之后转为整形 砍掉后面的小数位 判断是否等于这个数字
            if ((long) Math.sqrt(i * n) * (long) Math.sqrt(i * n) == i * n) {
    
    
                System.out.println(i);
                return;
            }
        }
    }
}

Solución correcta : De hecho, el punto de prueba de esta pregunta es descomponer los factores primos, n ⋅ x = m 2 n x=m^2norte X=metro2 ,no¿Cuál es la mínima multiplicación de n , que puede hacernnEl número de factores primos en n se vuelve par; n
= P 1 α 1 × P 2 α 2 × . . . × P n α nn=P_1^{α1}×P_2^{α2}×...×P_n^{ n}norte=PAG1α 1×PAG2α 2×. . .×PAGnorteun _, si el grado de un factor primo α i α_iunyoes un número impar, entonces multiplicamos por al menos este factor primo, así que este problema es poner nnDescomponga los factores primos de n , mire los grados de todos sus términos, multiplique todos los factores primos con grados impares, y esa es la respuesta.

时间复杂度 O( norte ) O(\sqrt N)O (norte )

import java.util.Scanner;

public class Main {
    
    
    public static void main(String[] args) {
    
    
        Scanner sc = new Scanner(System.in);
        long n = sc.nextLong();
        long res = 1;
        for (long i = 2; i * i <= n; i++) {
    
    
            if (n % i == 0) {
    
    
                int s = 0;
                while (n % i == 0) {
    
     // 分解质因子求次数
                    s++; 
                    n /= i;
                }
                if (s % 2 == 1) res *= i; // 如果是奇数 则乘起来
            }
        }
        if (n > 1) res *= n; // 表示还有一个质因子 次数是1
        
        System.out.print(res);
    }
}

Para n > 1 n > 1norte>1 Por ejemplo,24 = 2 3 × 3 24 = 2^3×32 4=23×3 , en este momento nuestrores = 2 res=2r e s=2 , pero también hay un factor de3 33 no se cuenta, porque estamoswhile(n % i == 0)en el último paso del códigon /= i = 3, el último factor se deja sin considerar, y el número es 1, por lo que finalmente se multiplica pornnn es suficiente,res = 2 × 3 = 6 res = 2 × 3=6r e s=2×3=6 _

Supongo que te gusta

Origin blog.csdn.net/weixin_53407527/article/details/123894773
Recomendado
Clasificación