about summary refs log tree commit diff
path: root/others/other/fdp.c
diff options
context:
space:
mode:
Diffstat (limited to 'others/other/fdp.c')
-rw-r--r--others/other/fdp.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/others/other/fdp.c b/others/other/fdp.c
new file mode 100644
index 0000000..439716b
--- /dev/null
+++ b/others/other/fdp.c
@@ -0,0 +1,50 @@
+#include <math.h>
+#include <stdio.h>
+
+int main()
+{
+	FILE *F = fopen("FDP.INP", "r");
+	long long n, m, j, factors[11];
+	long i;
+	char f = 0, fm[11] = {}, fn[11] = {}, k = 127;
+
+	fscanf(F, "%lld %lld", &n, &m);
+	fclose(F);
+
+	if (m % 2 == 0) {
+		factors[0] = 2;
+		do {
+			m /= 2;
+			fm[0]++;
+		} while (m % 2 == 0);
+		f = 1;
+	}
+
+	for (i = 3; i <= (long) sqrt((double) m); i += 2)
+		if (m % i == 0) {
+			factors[f] = i;
+			do {
+				m /= i;
+				fm[f]++;
+			} while (m % i == 0);
+			f++;
+		}
+
+	if (m != 1) {
+		factors[f] = m;
+		fm[f] = 1;
+		f++;
+	}
+
+	for (i = 0; i < f; i++) {
+		for (j = factors[i]; j <= n; j *= factors[i])
+			fn[i] += n / j;
+		k = (fn[i] / fm[i] < k) ? (fn[i] / fm[i]) : k;
+	}
+
+	F = fopen("FDP.OUT", "w");
+	fprintf(F, "%hhd\n", k);
+	fclose(F);
+
+	return 0;
+}