Solving with Ruby and Python AtCoder ARC067 C Prime Factorization

Introduction

This theme

AtCoder Regular Contest C - Factors of Factorial Difficulty: 925

This theme, prime factorization

It is a problem such as a simplified version of * Solving atCoder ABC057 C prime factorization bit full search with Ruby and Python *.

Although it is called factorial, when you actually factorial, integer overflow is visible in C language system, so that point may be ** Difficulty ** higher. Ruby

ruby.rb


require 'prime'

n = gets.to_i
if n == 1
  puts '1'
  exit
end
M = 10 ** 9 + 7
h = Hash.new(0)
1.upto(n) do |i|
  i.prime_division.each do |k, v|
    h[k] += v
  end
end
puts h.values.map{|i| (i + 1)}.inject{|u, v| u * v % M}

prime.rb


1.upto(n) do |i|
  i.prime_division.each do |k, v|
    h[k] += v
  end
end

No actual factorial calculation is required, and the numbers in the factorial sequence are factored into prime factors and inserted into the hash. ** Addendum ** I received a comment, so I corrected it.

perm.rb


puts h.values.map{|i| (i + 1)}.inject{|u, v| u * v % M}

Since there are cases where a certain prime number is not selected (zero is selected), (i + 1) is used to obtain the number of combinations.

Ruby digression

By the way, the factorial of the maximum value 1000 of 1 ≤ N ≤ 1000 is a numerical value of 2568 digits.

402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Even if this number is directly Prime.prime_division (1000!), Factorization will be performed normally, resulting in ʻAC. Just a little ! `I did. Python

python.py


from math import sqrt
from collections import defaultdict

n = int(input())
h = defaultdict(int)
def factorization(arg):
    while arg % 2 == 0:
        h[2] += 1
        arg //= 2
    for i in range(3, int(sqrt(arg)) + 1, 2):
        while arg % i == 0:
            h[i] += 1
            arg //= i
    if arg > 1:
        h[arg] += 1
if n == 1:
    print(1)
else:
    m = 10 ** 9 + 7
    for i in range(1, n + 1):
        factorization(i)
    cnt = 1
    for key, v in h.items():
        cnt *= (v + 1)
        cnt %= m
    print(cnt)

I added a prime number to defaultdict with my own factorization function.

Ruby Python
Code length(Byte) 239 603
Execution time(ms) 15 23
memory(KB) 2300 3316

Summary

Recommended Posts

Solving with Ruby and Python AtCoder ARC067 C Prime Factorization
Solving with Ruby and Python AtCoder ABC057 C Prime Factorization Bit Search
Solving with Ruby, Perl, Java and Python AtCoder CADDi 2018 C Prime Factorization
Solving with Ruby and Python AtCoder ARC 059 C Least Squares
Solving with Ruby, Perl, Java, and Python AtCoder ARC 098 C Cumulative sum
Solving with Ruby and Python AtCoder ABC011 C Dynamic programming
Solving with Ruby, Perl, Java, and Python AtCoder ABC 065 C factorial
Benchmark for C, Java and Python with prime factorization
Solving with Ruby and Python AtCoder CODE FESTIVAL 2016 qual C B Priority queue
Solving in Ruby, Perl, Java, and Python AtCoder ARC 066 C Iterative Squares Hash
Solving with Ruby and Python AtCoder ABC178 D Dynamic programming
Solving with Ruby and Python AtCoder ABC151 D Breadth-first search
Solving with Ruby and Python AtCoder AISING2020 D Iterative Squares
Solving with Ruby, Perl, Java and Python AtCoder ATC 002 A
Solving with Ruby and Python AtCoder ABC153 E Dynamic programming
Solving with Ruby, Perl, Java and Python AtCoder ATC 002 B
Solving with Ruby and Python AtCoder ABC138 D Adjacency list
Solving with Ruby, Perl, Java and Python AtCoder diverta 2019 Programming Contest C String Manipulation
Solving with Ruby, Python and numpy AtCoder ABC054 B Matrix operation
Solving with Ruby, Python and networkx AtCoder ABC168 D Adjacency list
Solving with Ruby AtCoder ABC110 C String Manipulation
Solving with Ruby, Perl, Java and Python AtCoder ABC 107 B String Manipulation
Solving with Ruby, Perl, Java and Python AtCoder ABC 165 D Floor function
Solving with Ruby, Perl, Java and Python AtCoder ABC 131 D Array Sorting
Solve with Ruby, Perl, Java and Python AtCoder ABC 047 C Regular Expression
AtCoder ARC080 D simulation solved in Ruby and Python
Sorting AtCoder ARC 086 C hashes to solve in Ruby, Perl, Java and Python
Solve with Ruby and Python AtCoder ABC084 D Cumulative sum of prime numbers
Scraping with Node, Ruby and Python
Solved AtCoder ABC 114 C-755 with Python3
Encrypt with Ruby (Rails) and decrypt with Python
Easy web scraping with Python and Ruby
RaspberryPi L Chika with Python and C #
AtCoder ABC172 C Cumulative Sum Binary Search Solved by Ruby and Python
Challenge AtCoder (ABC) 164 with Python! A ~ C problem
Solve AtCoder 167 with python
Ruby, Python and map
Python and Ruby split
Comparison of CoffeeScript with JavaScript, Python and Ruby grammar
Version control of Node, Ruby and Python with anyenv
Programming with Python and Tkinter
Encryption and decryption with Python
[Python 3] Prime factorization in 14 lines
Solve AtCoder ABC166 with python
Light blue with AtCoder @Python
[AtCoder explanation] Control ABC180 A, B, C problems with Python!
[AtCoder explanation] Control ABC188 A, B, C problems with Python!
Python and hardware-Using RS232C with Python-
Mandelbrot Benchmark (C, PHP, HHVM, Ruby, Python, PyPy, and Kinx)
Python on Ruby and angry Ruby on Python
ABC163 C problem with python3
Solving Sudoku with Python (Incomplete)
Python and ruby slice memo
Determine prime numbers with python
Zundokokiyoshi with python / ruby / Lua
Solving Sudoku with Python (Part 2)
Ruby and Python syntax ~ branch ~
Fibonacci and prime implementations (python)
python with pyenv and venv
ABC188 C problem with python3
Solve AtCoder ABC 186 with Python