SFPC/2021

2021 SFPC pC1 ver.2

열정아빠와아들 2023. 2. 5. 15:09
// ver.2 빠른 버전
#include <stdio.h>
int v[1000004];

// 입력: x : 약수를 구할 정수
// 출력 : count : x의 약수의 개수
int factor_fast(int x)
{
    // count = 약수의 개수
    int count = 0;

    // i를 1부터 root(x)까지 돌린다.
    for (int i = 1; i * i<= x; i++)
    {
        // x 나누기 i를 헀는데 나머지가 0이면 약수이므로
        // count에 2을 더해준다.(약수 : i랑 x / i)
        if (x % i == 0) count += 2;

        // 만약 위에서 2를 더해줬는데 두 개를 곱헀더니 x가 나왔다는건
        // 두 숫자가 같다는 것이므로 하나 뺴 준다.
        if (i * i == x) count--;
    }
    // 약수의 개수를 매인 함수로 전달.
    return count;
}

int main()
{
    int m, n;

    scanf("%d %d", &n, &m);
    for (int i = 0; i < n; i++)
        scanf("%d", &v[i]);

    for (int i = 0; i < n; i++)
    {
        // factor 함수에서 나온 약수의 개수와 m 나누기 v[i]를 한 배수 값을 더한 후 -1 해준다.
        printf("%d\n", (factor_fast(v[i]) + m / v[i]) - 1);
    }
}