Submission #39448339


Source Code Expand

#line 1 "ABC254-D.test.cpp"
#define PROBLEM "https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/1/ITP1_1_A"

#line 2 "/home/zawatin/compro/library/src/math/linearSieve.hpp"

#include <vector>
#include <utility>

namespace zawa {

class linearSieve {
private:
	std::vector<int> divs;
	std::vector<int> primes;

public:
	linearSieve() {}
	linearSieve(std::size_t n) : divs(n + 1, 1) {
		for (std::size_t i = 2 ; i < n + 1 ; i++) {
			if (divs[i] == 1) {
				divs[i] = i;
				primes.push_back((int)i);
			}
			for (const auto& p : primes) {
				if (p * i > n or p > divs[i]) {
					break;
				}
				divs[p * i] = p;
			}
		}
	}

	std::vector<std::pair<int, int>> factorize(int x) {
		std::vector res(0, std::pair(0, 0));
		while (x > 1) {
			res.emplace_back(divs[x], 0);
			while (divs[x] == res.back().first) {
				x /= divs[x];
				res.back().second++;
			}
		}
		return res;
	}

	std::vector<int> divisor(int x) {
		std::vector res(1, 1);
		for (const auto& [p, q] : factorize(x)) {
			std::size_t now = res.size();
			for (std::size_t i = 0 ; i < now ; i++) {
				int mul = p;
				for (int _ = 0 ; _ < q ; _++) {
					res.emplace_back(res[i] * mul);
					mul *= p;
				}
			}
		}
		return res;
	}

	std::vector<int> enumPrime() {
		return primes;
	}

	int numPrime() {
		return (int)primes.size();
	}

	bool isPrime(int x) {
		return (x != 0 and x != 1 and divs[x] == x);
	}

	int operator[](int x) {
		return divs[x];
	}
};

}
#line 4 "ABC254-D.test.cpp"

#include <iostream>

int main() {
	int N; std::cin >> N;
	zawa::linearSieve siv(N);
	std::vector<int> dp(N + 1, 1);
	for (int i = 2 ; i < N + 1 ; i++) {
		int lpf = siv[i];
		dp[i] = dp[i / lpf];
		if (dp[i] % lpf == 0) {
			dp[i] /= lpf;
		}
		else {
			dp[i] *= lpf;
		}
	}
	std::vector bucket(N + 1, 0);
	for (int i = 1 ; i < N + 1 ; i++) {
		bucket[dp[i]]++;
	}
	long long ans = 0LL;
	for (int i = 0 ; i < N + 1 ; i++) {
		ans += (long long)bucket[i] * bucket[i];
	}
	std::cout << ans << std::endl;
	
	// std::cout << "Hello World" << std::endl;
}

/*
 * AtCoder Beginner Contest 254 - D Together Square
 */

Submission Info

Submission Time
Task D - Together Square
User zawatin
Language C++ (GCC 9.2.1)
Score 400
Code Size 2186 Byte
Status AC
Exec Time 12 ms
Memory 5580 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 400 / 400
Status
AC × 2
AC × 14
Set Name Test Cases
Sample example_00.txt, example_01.txt
All example_00.txt, example_01.txt, test_00.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt
Case Name Status Exec Time Memory
example_00.txt AC 7 ms 3400 KiB
example_01.txt AC 2 ms 3500 KiB
test_00.txt AC 5 ms 4056 KiB
test_01.txt AC 4 ms 3624 KiB
test_02.txt AC 5 ms 3800 KiB
test_03.txt AC 8 ms 5460 KiB
test_04.txt AC 3 ms 3720 KiB
test_05.txt AC 9 ms 5428 KiB
test_06.txt AC 12 ms 5576 KiB
test_07.txt AC 11 ms 5508 KiB
test_08.txt AC 10 ms 5576 KiB
test_09.txt AC 12 ms 5528 KiB
test_10.txt AC 2 ms 3568 KiB
test_11.txt AC 11 ms 5580 KiB