Submission #64571765


Source Code Expand

Copy
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
uint64_t add(uint64_t a, uint64_t b) {
if (a > UINT64_MAX - b) return UINT64_MAX;
return a + b;
}
uint64_t mul(uint64_t a, uint64_t b) {
if (b == 0) return 0;
if (a > UINT64_MAX / b) return UINT64_MAX;
return a * b;
}
uint64_t N;
int buhin_cnt = 0;
uint64_t buhin[128];
int kosuu[128];
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>

uint64_t add(uint64_t a, uint64_t b) {
	if (a > UINT64_MAX - b) return UINT64_MAX;
	return a + b;
}

uint64_t mul(uint64_t a, uint64_t b) {
	if (b == 0) return 0;
	if (a > UINT64_MAX / b) return UINT64_MAX;
	return a * b;
}

uint64_t N;

int buhin_cnt = 0;
uint64_t buhin[128];
int kosuu[128];

void search(int pos, uint64_t cur) {
	if (pos >= buhin_cnt) {
		const uint64_t diff = cur, target = N / cur;
		uint64_t l = diff + 1, r = UINT64_MAX;
		while (l <= r) {
			uint64_t m = l + (r - l) / 2;
			uint64_t check = add(add(mul(m, m), mul(m, m - diff)), mul(m - diff, m - diff));
			if (check == target) {
				printf("%" PRIu64 " %" PRIu64 "\n", m, m - diff);
				exit(0);
			} else if (check < target) {
				l = m + 1;
			} else {
				r = m - 1;
			}
		}
	} else {
		int i;
		search(pos + 1, cur);
		for (i = 0; i < kosuu[pos]; i++) {
			cur *= buhin[pos];
			search(pos + 1, cur);
		}
	}
}

int main(void) {
	uint64_t cur, i;
	if (scanf("%" SCNu64, &N) != 1) return 1;
	cur = N;
	for (i = 2; i * i <= cur; i++) {
		if (cur % i == 0) {
			buhin[buhin_cnt] = i;
			while (cur % i == 0) {
				kosuu[buhin_cnt]++;
				cur /= i;
			}
			buhin_cnt++;
		}
	}
	if (cur > 1) {
		buhin[buhin_cnt] = cur;
		kosuu[buhin_cnt] = 1;
		buhin_cnt++;
	}
	search(0, 1);
	puts("-1");
	return 0;
}

/*

[ 高校数学 ] x の3乗と y の3乗の和および差の因数分解は記憶すべし - 偏差値40プログラマー
https://hensa40.cutegirl.jp/archives/493

x^3 - y^3 = (x - y) * (x^2 + x*y + y^2)

前半を固定 → xを決めるとyも決まる、後半は単調増加 → 二分探索的な感じのやつ

*/

Submission Info

Submission Time
Task D - Cubes
User mikecat
Language C (gcc 12.2.0)
Score 425
Code Size 1750 Byte
Status AC
Exec Time 815 ms
Memory 1752 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 425 / 425
Status
AC × 3
AC × 35
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_test_00.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt, 01_test_25.txt, 01_test_26.txt, 01_test_27.txt, 01_test_28.txt, 01_test_29.txt, 01_test_30.txt, 01_test_31.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 0 ms 1656 KB
00_sample_01.txt AC 0 ms 1564 KB
00_sample_02.txt AC 1 ms 1708 KB
01_test_00.txt AC 1 ms 1600 KB
01_test_01.txt AC 0 ms 1632 KB
01_test_02.txt AC 0 ms 1724 KB
01_test_03.txt AC 0 ms 1620 KB
01_test_04.txt AC 0 ms 1616 KB
01_test_05.txt AC 1 ms 1640 KB
01_test_06.txt AC 0 ms 1632 KB
01_test_07.txt AC 1 ms 1592 KB
01_test_08.txt AC 3 ms 1736 KB
01_test_09.txt AC 1 ms 1644 KB
01_test_10.txt AC 10 ms 1632 KB
01_test_11.txt AC 0 ms 1744 KB
01_test_12.txt AC 1 ms 1708 KB
01_test_13.txt AC 1 ms 1660 KB
01_test_14.txt AC 1 ms 1740 KB
01_test_15.txt AC 1 ms 1604 KB
01_test_16.txt AC 6 ms 1728 KB
01_test_17.txt AC 2 ms 1584 KB
01_test_18.txt AC 815 ms 1736 KB
01_test_19.txt AC 10 ms 1712 KB
01_test_20.txt AC 51 ms 1752 KB
01_test_21.txt AC 0 ms 1576 KB
01_test_22.txt AC 57 ms 1660 KB
01_test_23.txt AC 33 ms 1624 KB
01_test_24.txt AC 0 ms 1628 KB
01_test_25.txt AC 0 ms 1536 KB
01_test_26.txt AC 0 ms 1508 KB
01_test_27.txt AC 0 ms 1596 KB
01_test_28.txt AC 0 ms 1744 KB
01_test_29.txt AC 0 ms 1736 KB
01_test_30.txt AC 0 ms 1600 KB
01_test_31.txt AC 1 ms 1636 KB


2025-04-06 (Sun)
05:40:12 +09:00