Submission #31554504


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()
        {
            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 primes = Prime.Sieve((int)1e6).ToArray();
            var M = primes.Length;
            var answer = 0;
            var j = M - 1;
            for (var i = 0; i < j; i++)
            {
                while (i < j)
                {
                    var p = (long)primes[i];
                    var q = (long)primes[j] * primes[j] * primes[j];
                    try
                    {
                        checked
                        {
                            if (p * q <= N)
                            {
                                break;
                            }
                            else
                            {
                                j--;
                            }
                        }
                    }
                    catch
                    {
                        j--;
                    }
                }

                answer += j - i;
            }

            Console.WriteLine(answer);
        }

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

Submission Info

Submission Time
Task D - 250-like Number
User AconCavy
Language C# (.NET Core 3.1.201)
Score 400
Code Size 6213 Byte
Status AC
Exec Time 98 ms
Memory 29184 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 400 / 400
Status
AC × 3
AC × 20
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
All sample_01.txt, sample_02.txt, sample_03.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, test_16.txt, test_17.txt
Case Name Status Exec Time Memory
sample_01.txt AC 85 ms 28640 KiB
sample_02.txt AC 89 ms 28840 KiB
sample_03.txt AC 86 ms 29108 KiB
test_01.txt AC 97 ms 28808 KiB
test_02.txt AC 85 ms 29028 KiB
test_03.txt AC 89 ms 28808 KiB
test_04.txt AC 86 ms 28732 KiB
test_05.txt AC 84 ms 28824 KiB
test_06.txt AC 82 ms 29024 KiB
test_07.txt AC 85 ms 29120 KiB
test_08.txt AC 98 ms 28836 KiB
test_09.txt AC 81 ms 28712 KiB
test_10.txt AC 89 ms 28960 KiB
test_11.txt AC 89 ms 28620 KiB
test_12.txt AC 79 ms 28840 KiB
test_13.txt AC 91 ms 28760 KiB
test_14.txt AC 80 ms 28716 KiB
test_15.txt AC 80 ms 28804 KiB
test_16.txt AC 84 ms 28704 KiB
test_17.txt AC 86 ms 29184 KiB