Submission #41044943


Source Code Expand

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Numerics;

namespace Tasks
{
    public class D
    {
        public static void Main()
        {
            using var sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
            Console.SetOut(sw);
            Solve();
            Console.Out.Flush();
        }

        public static void Solve()
        {
            var N = Scanner.Scan<long>();
            var P = Prime.Sieve((int)1e6).Select(x => (long)x).ToArray();
            long answer = 0;

            for (var i = 0; i < P.Length; i++)
            {
                var a = P[i];
                var aa = a * a;
                if (aa > N) break;

                for (var j = i + 2; j < P.Length; j++)
                {
                    var c = P[j];
                    var cc = c * c;
                    if (cc > N || aa * cc > N) break;
                    var aacc = aa * cc;
                    var k = Math.Min(j - 1, LowerBound(P, N / aacc));
                    while (k > i && (P[k] >= c || aacc * P[k] > N)) k--;
                    answer += Math.Max(0, k - i);
                }
            }

            Console.WriteLine(answer);
        }

        public static int UpperBound<T>(ReadOnlySpan<T> source, T key) where T : IComparable<T>
        {
            var (l, r) = (-1, source.Length);
            while (r - l > 1)
            {
                var m = l + (r - l) / 2;
                if (source[m].CompareTo(key) > 0) r = m;
                else l = m;
            }
            return r;
        }

        public static int LowerBound<T>(ReadOnlySpan<T> source, T key) where T : IComparable<T>
        {
            var (l, r) = (-1, source.Length);
            while (r - l > 1)
            {
                var m = l + (r - l) / 2;
                if (source[m].CompareTo(key) >= 0) r = m;
                else l = m;
            }
            return r;
        }

        public static class Prime
        {
            public static IEnumerable<long> GetFactors(long value)
            {
                if (value < 2) yield break;
                IEnumerable<long> F(long x)
                {
                    while (value % x == 0)
                    {
                        yield return x;
                        value /= x;
                    }
                }
                foreach (var v in F(2)) yield return v;
                for (var i = 3L; i * i <= value; i += 2)
                {
                    foreach (var v in F(i)) yield return v;
                }
                if (value > 1) yield return value;
            }
            public static IDictionary<long, int> GetFactorDictionary(long value)
            {
                var factors = new Dictionary<long, int>();
                if (value < 2) return factors;
                void CountUp(long n)
                {
                    if (value % n != 0) return;
                    factors[n] = 0;
                    while (value % n == 0)
                    {
                        value /= n;
                        factors[n]++;
                    }
                }
                CountUp(2);
                for (var i = 3L; i * i <= value; i += 2) CountUp(i);
                if (value > 1) factors[value] = 1;
                return factors;
            }
            public static IEnumerable<int> Sieve(int value)
            {
                if (value < 2) yield break;
                yield return 2;
                var sieve = new bool[(value + 1) / 2];
                for (var i = 1; i < sieve.Length; i++)
                {
                    if (sieve[i]) continue;
                    yield return i * 2 + 1;
                    for (var j = i; j < sieve.Length; j += i * 2 + 1) sieve[j] = true;
                }
            }
            public static bool IsPrime(long value)
            {
                if (value == 2 || value == 3) return true;
                if (value < 2 || value % 2 == 0 || value % 3 == 0) return false;
                for (var i = 5L; i * i <= value; i += 6)
                {
                    if (value % i == 0 || value % (i + 2) == 0) return false;
                }
                return true;
            }
        }

        public static class Scanner
        {
            public static T Scan<T>() where T : IConvertible => Convert<T>(Scan()[0]);
            public static (T1, T2) Scan<T1, T2>() where T1 : IConvertible where T2 : IConvertible
            {
                var buffer = Scan();
                return (Convert<T1>(buffer[0]), Convert<T2>(buffer[1]));
            }
            public static (T1, T2, T3) Scan<T1, T2, T3>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible
            {
                var buffer = Scan();
                return (Convert<T1>(buffer[0]), Convert<T2>(buffer[1]), Convert<T3>(buffer[2]));
            }
            public static (T1, T2, T3, T4) Scan<T1, T2, T3, T4>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible
            {
                var buffer = Scan();
                return (Convert<T1>(buffer[0]), Convert<T2>(buffer[1]), Convert<T3>(buffer[2]), Convert<T4>(buffer[3]));
            }
            public static (T1, T2, T3, T4, T5) Scan<T1, T2, T3, T4, T5>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible where T5 : IConvertible
            {
                var buffer = Scan();
                return (Convert<T1>(buffer[0]), Convert<T2>(buffer[1]), Convert<T3>(buffer[2]), Convert<T4>(buffer[3]), Convert<T5>(buffer[4]));
            }
            public static (T1, T2, T3, T4, T5, T6) Scan<T1, T2, T3, T4, T5, T6>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible where T5 : IConvertible where T6 : IConvertible
            {
                var buffer = Scan();
                return (Convert<T1>(buffer[0]), Convert<T2>(buffer[1]), Convert<T3>(buffer[2]), Convert<T4>(buffer[3]), Convert<T5>(buffer[4]), Convert<T6>(buffer[5]));
            }
            public static IEnumerable<T> ScanEnumerable<T>() where T : IConvertible => Scan().Select(Convert<T>);
            private static string[] Scan()
            {
                var line = Console.ReadLine()?.Trim() ?? string.Empty;
                return string.IsNullOrEmpty(line) ? Array.Empty<string>() : line.Split(' ');
            }
            private static T Convert<T>(string value) where T : IConvertible => (T)System.Convert.ChangeType(value, typeof(T));
        }
    }
}

Submission Info

Submission Time
Task D - AABCC
User AconCavy
Language C# (.NET Core 3.1.201)
Score 400
Code Size 6870 Byte
Status AC
Exec Time 224 ms
Memory 29980 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 400 / 400
Status
AC × 2
AC × 17
Set Name Test Cases
Sample sample_01.txt, sample_02.txt
All sample_01.txt, sample_02.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, test_12.txt, test_13.txt, test_14.txt, test_15.txt
Case Name Status Exec Time Memory
sample_01.txt AC 95 ms 29860 KiB
sample_02.txt AC 224 ms 29648 KiB
test_01.txt AC 87 ms 29924 KiB
test_02.txt AC 98 ms 29784 KiB
test_03.txt AC 82 ms 29560 KiB
test_04.txt AC 215 ms 29608 KiB
test_05.txt AC 215 ms 29612 KiB
test_06.txt AC 189 ms 29872 KiB
test_07.txt AC 214 ms 29564 KiB
test_08.txt AC 91 ms 29564 KiB
test_09.txt AC 221 ms 29632 KiB
test_10.txt AC 221 ms 29980 KiB
test_11.txt AC 196 ms 29664 KiB
test_12.txt AC 209 ms 29604 KiB
test_13.txt AC 209 ms 29620 KiB
test_14.txt AC 217 ms 29864 KiB
test_15.txt AC 212 ms 29632 KiB