Problem:


Score : 300 points

Problem Statement

You are given an integer N.
Find the number of the positive divisors of N!, modulo 10^9+7.

Constraints

1≤N≤10^3

Input

The input is given from Standard Input in the following format:

N

Output

Print the number of the positive divisors of N!, modulo 10^9+7.

Sample Input 1

3

Sample Output 1

4

There are four divisors of 3! =6: 1, 2, 3 and 6. Thus, the output should be 4.

Sample Input 2

6

Sample Output 2

30

Sample Input 3

1000

Sample Output 3

972926972



Sample input:
3


Sample output:
4

Submission status: Accepted

Solution code:
mod=1000000007

k=int(input())

if k==1:
    print(1)
    exit()
elif k==2:
    print(2)
    exit()
    
counter = 0
primes = [2, 3]

for n in range(5, k+1, 2):
    isprime = True
    for i in range(0, len(primes)):
        counter+=1
        if primes[i]**2 > n:
            break
        counter += 1
        if n % primes[i] == 0:
            isprime = False
            break
    if isprime:
        primes.append(n)    

#print(primes)
num=[0]*(k+1)

for i in range(1,k+1):
    for a in primes:
        b=i
        while b>1:
            if b%a==0:
                num[a]+=1
                b=b//a
            else:
                break

ans=1
        
for a in primes:
    if num[a]>0:
        ans=ans*(num[a]+1)%mod
        
#print(num)
print(ans)

Submission status: Accepted

Solution code:
import math

prime = {}

N = int(input())

def judge(N):

    if N==1:
        print(1)
        return 0

    isPrime = [True]*(N+1)
    isPrime[0] = False
    isPrime[1] = False
    for i in range(2,int(math.sqrt(N))+2):
        if isPrime[i]:
            n = 2*i
            while n<=N:
                isPrime[n] = False
                n += i
    
    for i in range(N+1):
        if isPrime[i]:
            prime[i] = 0
    
    key_list = list(prime.keys())
    
    for num in range(2,N+1):
        res = num
        idx = 0
        while res>1:
            k = key_list[idx]
            if res%k == 0:
                prime[k] += 1
                res = res//k
            else:
                idx += 1
        
    ans = 1
    for v in prime.values():
        ans *= (v+1) 
        ans = ans % (10**9+7)
        if ans==0:
            ans = 1
        
    print(ans)
    return 0

judge(N)

Submission status: Accepted

Solution code:
import sys

def prime_factorize(n, factor):
    base = 2
    exp = 0
    while base < n:
        while n % base == 0:
            n = n // base
            exp += 1
        if exp > 0:
            factor[base] = factor.get(base, 0) + exp
        base += 1
        exp = 0
    if n > 1:
        factor[base] = factor.get(base, 0) + 1
    return factor

n = int(input())

if n == 1:
    print(1)
    sys.exit(0)

factor = {}
for i in range(2, n+1):
    factor = prime_factorize(i, factor)

ans = 1
for v in factor.values():
    ans *= v + 1

print(ans % (10 ** 9 + 7))

Submission status: Accepted

Solution code:
import math
def mark(s, x):
    for i in xrange(x + x, len(s), x):
        s[i] = False

def sieve(n):
    s = [True] * n
    for x in xrange(2, int(n**0.5) + 1):
        if s[x]: mark(s, x)
    return [i for i in xrange(0,n) if s[i] and i > 1]

n = int(input())

arr = sieve(n+1)
f = math.factorial(n)

primes = [0 for i in range(n+1)]


for i in arr:
	while f%i == 0:
		f/= i
		primes[i] += 1

ans = 1
for i in primes:
	if i!= 0:
		ans *= i+1

print ans%(10**9+7)

Submission status: Accepted

Solution code:
prime = [1, 2, 4, 8, 16, 30, 60, 96, 160, 270, 540, 792, 1584, 2592, 4032, 5376, 10752, 14688, 29376, 41040, 60800, 96000, 192000, 242880, 340032, 532224, 677376, 917280, 1834560, 2332800, 4665600, 5529600, 7864320, 12165120, 16422912, 19595520, 39191040, 60466176, 85100544, 102435840, 204871680, 258048000, 516096000, 677376000, 819624960, 258709753, 517419506, 876670706, 698576619, 464046052, 210846678, 87039944, 174079888, 559756674, 984916319, 217548604, 16857327, 609087587, 218175167, 106431041, 212862082, 535421074, 139926156, 50952999, 105219839, 195900610, 391801220, 889436190, 472974756, 845412639, 690825271, 891132264, 782264521, 316684054, 31280490, 665186745, 252135966, 764748573, 529497139, 790600338, 524719291, 999573608, 999147209, 522112609, 37861883, 417241520, 775916997, 997830958, 995661909, 729407917, 321723976, 871170030, 520705814, 149385219, 41956001, 988486370, 976972733, 516785610, 158924226, 583951250, 167902493, 687346296, 374692585, 229757313, 549263416, 890796057, 781592107, 875619122, 751238237, 277966376, 130571620, 574892396, 149784785, 921692445, 813661707, 582700142, 400726352, 358621292, 318642155, 250091916, 386472265, 174406757, 151737975, 260683867, 184202887, 320817301, 641634602, 125034947, 201660251, 962210566, 924421125, 489345615, 320577061, 637208078, 196761361, 626955546, 253911085, 389481998, 778963996, 576273102, 309075370, 619146484, 295106277, 464103226, 498550267, 627180822, 788686761, 989134263, 978268519, 902509248, 805018489, 112903872, 32995287, 295406792, 974343106, 721660051, 443320095, 316385239, 778274799, 190780502, 633014225, 727670045, 455340083, 498164792, 15588548, 97601235, 195202470, 569355054, 118486597, 342752204, 135661810, 90769804, 181539608, 519303442, 515842850, 84989549, 696032419, 231083385, 462166770, 150280772, 300561544, 884472740, 641985713, 569378318, 591770736, 690140664, 249252882, 677627271, 850771381, 851099110, 702198213, 111350575, 222701150, 859360900, 670197303, 177520684, 355041368, 643925245, 287850483, 323688011, 476804260, 749121574, 436195097, 100916105, 763521317, 852472431, 566135419, 817481112, 609114726, 316546467, 633092934, 400461490, 516478899, 802348580, 904410955, 621677199, 257318500, 176522245, 676814987, 463688019, 296329114, 264099706, 528199412, 36178948, 424547801, 768068647, 536137287, 180929498, 361858996, 212858280, 424867383, 432882564, 865765128, 720594700, 90410365, 461821767, 203725504, 114020002, 228040004, 637601848, 275203689, 996048794, 816392758, 827385828, 501246906, 502796187, 283931071, 433357175, 368415063, 694773670, 389547333, 672209469, 929924926, 339805954, 823423911, 430631131, 861262262, 912999218, 775754185, 248442642, 92860619, 47164638, 94329276, 560810218, 901787221, 979102645, 727649351, 20618968, 41237936, 409407748, 818815496, 105871481, 565828513, 733793480, 775394695, 826327221, 652654435, 644963335, 70964339, 34934197, 69868394, 21321430, 42642860, 308165968, 66236679, 863975191, 474703946, 965050168, 372703124, 98935522, 622346998, 724308287, 448616567, 387250563, 521154852, 757291985, 756807708, 98256492, 802531326, 949720885, 885971876, 131412209, 981761360, 661149918, 619958299, 331028217, 662056434, 807561987, 320675293, 914129701, 828259395, 37073206, 74146412, 402841690, 54637455, 617124544, 234249081, 751443813, 937109749, 192721498, 402972372, 453564416, 21903965, 219196964, 711481873, 513083746, 252120578, 510728243, 686346634, 854955589, 709911171, 78596230, 269965951, 409219288, 248271231, 873383775, 746767543, 509852147, 174891499, 984879786, 197881406, 237525166, 359571994, 592280493, 443047391, 387927598, 775855196, 487579371, 975158742, 351882153, 147029129, 237093507, 474187014, 233169083, 703708683, 126101010, 198878663, 367151757, 734303514, 558855498, 196629758, 161317030, 573722496, 327882255, 869789706, 71204994, 142409988, 519330677, 658916599, 820221123, 589765049, 882787662, 765575317, 237538730, 765336752, 111906311, 970555905, 547616857, 95233707, 919602856, 913510209, 325919347, 651838694, 787773019, 168803670, 875276542, 263468393, 816727867, 633455727, 500272724, 140006678, 171663917, 920917448, 754148927, 547298078, 412984678, 825969356, 89434825, 653930388, 136393590, 272787180, 276924235, 570666519, 590968903, 696916544, 114558109, 209914977, 987646996, 975293985, 732105167, 207549775, 590764498, 239710087, 413342719, 606756472, 119222007, 227695505, 450857281, 901714562, 192653364, 385306728, 234022344, 31755833, 752787939, 682129837, 972238124, 563737250, 589527825, 729854221, 873389836, 746779665, 973964734, 947929461, 5202400, 320558679, 402562062, 651932087, 438747311, 877494622, 851938578, 595655182, 953260474, 906520941, 610950283, 501334286, 115901200, 458267670, 725708035, 451416063, 34629651, 443595068, 292992687, 984336996, 352845142, 600659252, 738086132, 476172257, 146298687, 742115388, 685981689, 371963371, 5238701, 10477402, 766426619, 741060152, 215953758, 431907516, 900346034, 302070357, 669584758, 46053147, 500531147, 269366731, 835955289, 753764439, 748101695, 586666665, 340467085, 680934170, 993066655, 337509515, 702294178, 689317659, 610110893, 855932510, 718959729, 437919451, 162052266, 591444463, 937285062, 874570117, 577640930, 690830665, 441136051, 234385594, 995953016, 490091986, 701529803, 403059599, 173749087, 571309264, 670816347, 341632687, 12414678, 656616799, 110230917, 555093018, 326641735, 653283470, 841517232, 299713801, 790165940, 55645384, 857068605, 957840454, 891206655, 734604192, 144312526, 317679024, 396371648, 792743296, 423188008, 846376016, 985116058, 646955723, 952177710, 502929334, 92150358, 447989522, 924790847, 549384151, 424045976, 984526166, 194912796, 17485470, 655375515, 480905089, 910910739, 771660846, 177055119, 354110238, 487461754, 533406064, 889925808, 672895377, 471803466, 943606932, 363992147, 457850989, 337082821, 559633947, 903886732, 428980584, 430095367, 52327251, 636880607, 273761207, 706305042, 890884144, 393016175, 748347757, 949802139, 899604271, 310566618, 130756774, 816805638, 605028078, 169610267, 339220534, 575779053, 151558099, 779861186, 564602992, 437157814, 502964081, 478103459, 956206918, 385872385, 383885002, 125139522, 606176173, 727381953, 8385703, 189534611, 657264353, 809755457, 619510907, 607320752, 922420555, 310951652, 461684174, 548921957, 97843907, 729671781, 620980721, 857109915, 25052446, 275170024, 550340048, 495401987, 990803974, 362448559, 60904426, 929227965, 120741193, 257409647, 514819294, 969108899, 560048584, 985073824, 700527244, 680852420, 361704833, 819310219, 589014097, 1398831, 2797662, 533149213, 66298419, 177289968, 605590036, 607911651, 709970869, 953992856, 619456719, 655319030, 644362951, 232480867, 745680583, 590594926, 181189845, 520817003, 742434671, 899661005, 364907082, 733053610, 13738009, 433804341, 236387921, 508481622, 16963237, 232316619, 464633238, 221314587, 887788178, 285824818, 571649636, 737224462, 55447552, 88454246, 798654422, 982084080, 964168153, 247453861, 1833862, 99268162, 659694667, 466104507, 932209014, 864422567, 728845127, 537854091, 599199290, 264178678, 250863989, 574407941, 732405085, 314042625, 489474931, 176295562, 914244677, 852693813, 705387619, 193242738, 892738773, 352048555, 704097110, 771025308, 753975129, 927527314, 542054326, 2994361, 5988722, 142029115, 324378674, 100232612, 267369886, 945624300, 882384522, 416443431, 832886862, 784668659, 985124309, 298874953, 102595581, 589967510, 536599545, 782218536, 77865166, 65277123, 130554246, 660510295, 877005583, 275946488, 615306711, 199915845, 893431699, 154588775, 309177550, 504746854, 864753530, 291783330, 553114672, 78102633, 511352330, 753667006, 152737422, 966787467, 933574927, 743434691, 300957143, 206901132, 971318792, 551792353, 641951914, 887092590, 774185173, 324319767, 296313969, 419748261, 736668708, 125202855, 250405710, 860306792, 120041519, 287948500, 772974185, 72505984, 145011968, 197340762, 319569601, 29058411, 58116822, 503961279, 97170670, 855412437, 719283733, 922189282, 610817142, 981054324, 962108641, 555626129, 721425306, 8695797, 867937276, 204728691, 409457382, 327387384, 796008217, 623487493, 246974979, 808073302, 987531151, 661621379, 619686012, 885900428, 182865420, 604993928, 209987849, 112149920, 982821831, 436804698, 873609396, 249429664, 35442337, 542946067, 435717873, 357909594, 663354277, 349837771, 172902187, 725024195, 626724406, 951883201, 898886813, 611894793, 223789579, 156249711, 953762374, 941520348, 627312415, 732152146, 626637375, 697801379, 928373167, 467201812, 934403624, 300174312, 940164327, 768557112, 666818604, 430052749, 769678528, 637336196, 471510530, 884736131, 405930623, 88523589, 177047178, 741193266, 482386525, 959636069, 420122608, 870743513, 206500587, 931686480, 949884867, 256838150, 936095622, 169293108, 338586216, 20108011, 40216022, 515421399, 752804022, 39087839, 78175678, 170102, 340204, 946184524, 167781729, 835787762, 903545720, 642497069, 768924002, 848555995, 948817436, 408127979, 816255958, 800214847, 62298624, 211839153, 598162116, 649248474, 550398359, 199342730, 466361673, 327607418, 129788111, 60519012, 181516929, 291695327, 583390654, 933077030, 384594463, 248685267, 497370534, 574889090, 149778173, 508531933, 813332884, 744233240, 488466473, 623778584, 4368568, 996107508, 578055173, 827804465, 735970254, 633530545, 296440400, 68756126, 969743180, 876576330, 723047882, 284529056, 569058112, 955600472, 546169433, 803429308, 606858609, 391311257, 782622514, 544679226, 242364688, 879318989, 758637971, 578342645, 882174629, 300235757, 203149792, 186638455, 197248609, 4796039, 513889283, 888015602, 188499605, 180716688, 503135262, 412392718, 986465265, 744612799, 335327753, 188776829, 910205676, 736820167, 473640327, 438152515, 953148782, 574653619, 149307231, 898195178, 851342559, 30893933, 76564644, 524487579, 530536325, 132326487, 264652974, 436939730, 343683655, 215324089, 564898148, 437093697, 270599954, 464012989, 329405798, 476278405, 952556810, 152525842, 639543549, 539816971, 508927499, 355269900, 826589616, 330452844, 660905688, 53392193, 5534060, 69632488, 139264976, 254644395, 744092152, 539703029, 555053484, 899170215, 798340423, 422351818, 444892614, 151256959, 504363114, 893778023, 787556039, 802071847, 381737209, 85245710, 493128509, 945208231, 475863350, 279284954, 813432374, 905487747, 730092313, 198445481, 573858992, 640307357, 280614707, 780620191, 211244466, 611704170, 223408333, 494598748, 968788563, 176505672, 286582450, 993252097, 986504187, 529362547, 560946912, 386341399, 989315317, 14725758, 29451516, 215685422, 95948827, 463209666, 847826556, 571585155, 357027634, 71359521, 142719042, 128278247, 45877819, 700894880, 39614801, 668371163, 336742319, 338115610, 570799830, 972926972]

n = int(input())

print(prime[n - 1])

Submission status: Accepted

Solution code:
i_num = int(input())
factorial_dict = {}
total_res = 1

def do_factorial(n) :
    res = 1

    for i in range(2, n + 1) :
        cnt = 0
        while n%i == 0 :
            n //= i
            cnt += 1

        if i in factorial_dict.keys() :
            factorial_dict[i] += cnt
        else :
            factorial_dict[i] = cnt
            
        # print(factorial_dict)

for i in range(2, i_num + 1) :
    do_factorial(i)
    
for k, v in factorial_dict.items() :
    total_res *= (v + 1)
    
print(total_res % (10 ** 9 + 7))

Submission status: Accepted

Solution code:
N=int(input())
primes=[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]
def factorize(n,x):
    q,r=divmod(n,x)
    if r==0:
        return(1 + factorize(q,x))
    else:
        return(0)
def factors(n):
    ans=[]
    for p in primes:
        ans.append(factorize(n,p))
    return(ans)
def sumOflist(a,b):
    ans=[]
    for i in range(len(a)):
        ans.append(a[i]+b[i])
    return(ans)
numbers=[i for i in range(3,N+1)]
fTwo = factors(2)
import functools
answer = functools.reduce(lambda acc,b: sumOflist(acc,factors(b)),numbers,fTwo)
MOD=1000000007
ans = functools.reduce(lambda x,y: x*(y+1),answer,1)%MOD
if N==1:
    print(1)
else:
    print(ans)

Submission status: Accepted

Solution code:

n = input()
n = int(n)

i = n - 1
while i != 0:
	n = n * i
	i -= 1


def factorize(n):
	fct = list()
	base, exp = 2, 0
	while base * base <= n:
		while n % base == 0:
			n = n // base
			exp = exp + 1

		if exp > 0:
			fct.append((base, exp))
		
		base, exp = base + 1, 0
	if n > 1:
		fct.append((n, 1))
	return fct

fct = factorize(n)

x = 1
div_list = [exp + 1 for base, exp in fct]
for a in div_list:
	x = x * a

print(x % (10**9 + 7))

Submission status: Accepted

Solution code:
from functools import reduce
from copy import deepcopy

n = int(input())

def dadd(t, s): 
    for k,v in s.items():
        t[k] = t.get(k, 0) + v 
    return t

def pfd(c, i): 
    for j in range(2, i // 2 + 1): 
        if i % j == 0:
            d = i // j
            return dadd(deepcopy(c[j]), c.get(d, dict()))
    return { i: 1 } 

p,c = {},{}
for i in range(2, n + 1): 
    q = pfd(c, i)
    c[i] = q 
    dadd(p, q)

tot = reduce(lambda a,v: a * (v + 1), p.values(), 1)
print(tot % (10 ** 9 + 7))

Submission status: Accepted

Solution code:
n = int(input())
m = 10**9+7
primes = [2,3,5,7,11,13,17,19,23,29,31]
D = [0]*1001

for i in range(2, n+1):
    for p in primes:
        while(i % p == 0):
            D[p] += 1
            i //= p
    if i > 1:
        D[i] += 1

score = 1
for d in D:
    score = (score * (d + 1)) % m
print(score)

Submission status: Accepted

Solution code:
n = int(input())
m = 10**9+7
primes = [2,3,5,7,11,13,17,19,23,29,31]
D = [0]*1001


for i in range(2, n+1):
    v = i
    for p in range(2, 1000):
        while(v % p == 0):
            D[p] += 1
            v //= p
        if v == 1:
            break
    if(v == i):
        D[i] += 1

score = 1
for d in D:
    score = score * (d + 1)
print(score % m)

Submission status: Accepted

Solution code:
def main():
    N = input()
    N = int(N)

    k = 1
    s = []
    #lst = list(range(1,N+1))
    primes = prime(N+1)
    num = len(primes)

    # N=1
    lst = [0] * N
    if N ==1:
        print(1)
        exit()

    # N>=2
    for i in range(2,N+1):
        b =[]
        b = bunkai(i)
        for i in b:
            lst[primes.index(i)] += 1

    ans = 1
    for i in lst:
        if i is not 0:
            ans = ans * (i+1)
    print(ans%1000000007)


def prime(n):
    primes = []
    for i in range(2,n):
        flag = True
        for j in range(2,i):
            if i%j == 0:
                flag = False
        if flag:
            primes.append(i)
    return primes

def bunkai(i):
    bunkai =[]
    s =0
    while s ==0:
        for j in range(2,i+1):
            if i % j ==0:
                bunkai.append(j)
                i = int(i/j)
                if i ==1:
                   s=1
                break
    return bunkai

if __name__ == "__main__":
        main()

Submission status: Accepted

Solution code:
from itertools import count
from math import factorial, fabs
from collections import Counter
N = int(input())

mod = 10**9 + 7

def prime_factors(n):
    i = 2
    factors = []
    while i * i <= n:
        if n % i:
            i += 1
        else:
            n //= i
            factors.append(i)
    if n > 1:
        factors.append(n)
    return factors

factors = prime_factors(factorial(N))
r = 1
for v in Counter(factors).values():
    r *= v + 1

print(r % mod)

Submission status: Accepted

Solution code:
from math import factorial
from collections import Counter

N = int(input())
mod = 10 ** 9 + 7


def prime_decomposition(n):
    i = 2
    table = []
    while i * i <= n:
        while n % i == 0:
            n //= i
            table.append(i)
        i += 1
    if n > 1:
        table.append(n)
    return table


x = factorial(N)
p = prime_decomposition(x)

ans = 1
for v in Counter(p).values():
    ans *= v + 1
print(ans % mod)

Submission status: Accepted

Solution code:
n=int(input())
d=dict()
for i in range(n+1):
    while i>1:
        for j in range(2,i+1):
            if i%j==0:
                d[j]=d.get(j,0)+1
                break
        i=i//j
ans=1
for i in d:
    ans=(ans*(d[i]+1))%(10**9+7)
print(ans)

Submission status: Accepted

Solution code:
N = int(input())
from math import sqrt,ceil
from collections import Counter

def is_prime(n):
    if n == 1: return False
    if n == 2: return True
    for i in range(2, ceil(sqrt(n))+1):
        if n % i == 0: return False
    return True

def prime_factorization(n):
    if is_prime(n):return [n]
    factor = []
    for i in range(2, ceil(sqrt(n))+1):
        if not is_prime(i): continue
        q,r = divmod(n, i)
        if r == 0:
            n = q
            factor.append(i)
            q,r = divmod(n, i)    
            while r == 0:
                n = q
                factor.append(i)
                q,r = divmod(n, i)
    if n != 1:
        factor.append(n)
    return factor


factor = []
for i in range(1, N+1):
    t = prime_factorization(i)
    if len(t): factor += t

c = Counter(factor)
ans = 1
for i in c.values():
    ans *= (i+1)
    ans %= 10**9 + 7
print(ans)

Submission status: Accepted

Solution code:
class Prime:
    def __init__(self,number):#N以下の素数
        self.jud=[True]*(number+5)
        self.pri=[]
        self.jud[0]=False
        self.jud[1]=False
        for i in range(number):
            if self.jud[i]:
                self.pri.append(i)
                for j in range(2,(number-1)//i+1):
                    self.jud[i*j]=False
    
    def judge(self,x):
        return self.jud[x]
    
    def decom(self,x):
        s=x
        a =[]
        if s==1:
            return a
        while s>1:
            for p in self.pri:
                if s%p==0:
                    a.append(p)
                    s=s//p
                    break
        return a
            

from collections import defaultdict
dd=defaultdict(int)
N = int(input())
mod =10**9+7
P=Prime(10**3)
for i in range(1,N+1):
    for s in P.decom(i):
        dd[s]+=1
ans = 1
for i in dd.values():
    ans *= i+1
    ans %= mod
print(ans)

Submission status: Accepted

Solution code:
MOD = 10 ** 9 + 7

def get_prime_array(N):
    f = []
    for i in range(2, N + 1):
        flag = 0
        for j in f:
            if i % j == 0:
                flag = 1
                break
        if flag:
            continue
        f.append(i)
    return f


def m():
    n = int(input())
    d = dict()
    prime = get_prime_array(n)
    for i in range(2,n+1):
        tmp = i
        for p in prime:
            while not (tmp == 1):
                if tmp % p == 0:
                    tmp //= p
                    if d.get(p, 0) == 0:
                        d[p] = 1
                    else:
                        d[p] +=1
                else:
                    break
    ans = 1
    for k in d.keys():
        ans *= (d[k]+1)
    return ans % MOD
print(m())

Submission status: Accepted

Solution code:
import sys
sys.setrecursionlimit(10**9)
n = int(input())

def factorial(n):
    if n == 1:
        return 1
    return n * factorial(n-1)

num = factorial(n)

ans = 1
for i in range(2, n+1):
    count = 0
    while num % i == 0:
        count += 1
        num = num // i
    ans *= (count + 1)

print(ans % (10 ** 9 + 7))

Submission status: Accepted

Solution code:
from collections import Counter
N = int(input())

def factorize(n):
    d = Counter()
    m = 2
    while m*m <= n:
        while n%m == 0:
            n //= m
            d[m] += 1
        m += 1
    if n > 1:
        d[n] += 1
    return d

factors = Counter()
for n in range(1,N+1):
    factors += factorize(n)

ans = 1
MOD = 10**9+7
for v in factors.values():
    ans = (ans * (v+1))%MOD
print(ans)

Submission status: Accepted

Solution code:
from collections import Counter
N = int(input())
div = []
for i in range(2,N+1):
    while i != 1:
        for d in range(2,i+1):
            while i%d==0:
                i = i//d
                div.append(d)
C = Counter(div).most_common()
Ans = 1
for k,v in C:
    Ans = Ans*(v+1) % (10**9+7)

print(Ans)

Submission status: Accepted

Solution code:
def primes(n):
    is_prime = [True] * (n + 1)
    is_prime[0] = False
    is_prime[1] = False
    for i in range(2, int(n**0.5) + 1):
        if not is_prime[i]:
            continue
        for j in range(i * 2, n + 1, i):
            is_prime[j] = False
    return [i for i in range(n + 1) if is_prime[i]]

primes = primes(1000)
counts = [1]*len(primes)

n = int(input())
for k in range(2, n+1):
    i = 0
    prime = primes[0]
    while k > 1:
        if k%prime == 0:
            k //= prime
            counts[i] += 1
        else:
            i += 1
            prime = primes[i]

counts = list(filter(lambda x: x > 1, counts))

ans = 1
MOD = 10**9+7
for c in counts:
    ans = ans*c%MOD
print(ans)

Submission status: Accepted

Solution code:
def is_prime(x):
    m = 2
    while m * m <= x:
        if x % m == 0:
            return False
        m += 1

    return True


def main():
    n = int(input())
    p = [i for i in range(2, n+1) if is_prime(i)]
    cnt = [0 for i in range(len(p))]

    for i in range(2, n+1):
        idx = 0
        while idx < len(p) and p[idx] <= i:
            a = i
            while a % p[idx] == 0:
                cnt[idx] += 1
                a //= p[idx]

            idx += 1

    factor = 1
    for i in cnt:
        if i == 0:
            continue

        factor *= i + 1
        if factor >= 10 ** 9 + 7:
            factor %= 10 ** 9 + 7

    print(factor)


if __name__ == '__main__':
    main()

Submission status: Accepted

Solution code:
import math

M = int(input())
L = [1 for k in range(M+1)]

P = [2]
for p in range(3,1001,2):
    f = 1
    for k in range(2,int(math.sqrt(p))+1):
        if p%k == 0:
            f = 0
    if f == 1:
        P.append(p)
S = [1 for k in range(168)]

for N in range(1,M+1):
    p = 2
    while N > 1:
        if N%p==0:
            S[P.index(p)] += 1
            N//=p
        else:
            p += 1

ans = 1
for p in S:
    ans *= p
    ans %= 10**9+7
print(ans)

Submission status: Accepted

Solution code:
import math
n = int(input())

def sosuuhantei(x):
    p = x
    if p < 2:
        return false
    elif  n == 2:
        return p
    else:
        for i in range(3,math.floor(math.sqrt(x)) + 1,2):
            if x % i == 0:
                return False
        else:
             return x

sosulist = []

if n < 2:
    None
elif n == 2:
    sosulist.append(2)
else:
    sosulist.append(2)
    for i in range(3,n+1,2):
        sosulist.append(sosuuhantei(i))

while False in sosulist:
    sosulist.remove(False)

wari_dict = {}
nn = 1
if n > 1:
    for i in range(1,n+1):
        nn = nn * i

for i in range(len(sosulist)):
    kaisuu = 0
    j = nn
    while j % sosulist[i] == 0:
        kaisuu = kaisuu + 1
        j = j // sosulist[i]
    wari_dict.update({sosulist[i]:kaisuu})
                
#print(wari_dict)

goal = 1
for y in wari_dict.values():
    goal = goal * (y + 1)
    if goal > (10 ** 9 + 7):
        goal = goal % (10 ** 9 + 7)
        
print(goal)

Submission status: Accepted

Solution code:
N = int(input())
prime = {2: 0}
def fact(m):
    flag = 0
    for p in list(prime):
        if m % p == 0:
            prime[p] += 1
            r = m // p
            flag = 1
            if r != 1:
                fact(r)
                break
    if flag == 0: prime[m] = 1
        

if N == 1:
    print(1)
else:
    for i in range(2, N+1): fact(i)
    res = 1
    for i in prime.values():
        res = (res * (i + 1)) % 1000000007
    print(res)

Submission status: Accepted

Solution code:
n = int(input())

prime = []
for i in range(2, n + 1):
    j = 2
    while j ** 2 <= i:
        if i % j == 0:
            break
        j += 1
    if j ** 2 > i:
        prime.append(i)
        
ans = 1

for p in prime:
    soinsu = 1
    for i in range(2, n + 1):
        while True:
            if i % p == 0:
                soinsu += 1
                i = int(i / p)
            else:
                break
    ans = (ans * soinsu) % (10 ** 9 + 7)
         
print(ans)

Submission status: Accepted

Solution code:
n = int(input())

prime = []
for i in range(2, 1000):
    j = 2
    while j ** 2 <= i:
        if i % j == 0:
            break
        j += 1
    if j ** 2 > i:
        prime.append(i)
        
ans = 1

for p in prime:
    soinsu = 1
    for i in range(2, n + 1):
        while True:
            if i % p == 0:
                soinsu += 1
                i = int(i / p)
            else:
                break
    ans = (ans * soinsu) % (10 ** 9 + 7)
         
print(ans)

Submission status: Accepted

Solution code:
n=int(input())
import math
mod=10**9+7
m=math.factorial(n)
fli=[]#素数リスト
ans=[0]*(n+1)
ans[0]=ans[1]=1
i=2
while i*i<=n:
    j=2
    while i*j<=n and ans[i]==0:
        ans[i*j]=1
        j+=1
    i+=1
for i in range(n+1):
    if ans[i]==0:
        fli.append(i)
total=1
for i in fli:
    cnt=0
    while m%i==0:
        cnt+=1
        m=m//i
    total*=(cnt+1)
print(total%mod)

Submission status: Accepted

Solution code:
prime = []
for i in range(2, 1001):
	prime.append(i)

i = 0
while i < len(prime):
	if prime[i] < 32: break
	j = i + 1
	while j < len(prime):
		if prime[j] % prime[i] == 0:
			prime.pop(j)
		else:
			j = j + 1
	i = i + 1

primecount = []
for i in range(0, len(prime)):
	primecount.append(0)

N = int(raw_input())

for i in range(1, N+1):
	m = i
	j = 0
	while m >= prime[j]:
		if m % prime[j] == 0:
			primecount[j] = primecount[j]+1
			m = m / prime[j]
		else:
			j = j + 1

cnt = 1
for i in range(0, len(primecount)):
	cnt = cnt * (primecount[i]+1)

print cnt % 1000000007

Submission status: Accepted

Solution code:
def main():
    N = int(input())

    if N == 1:
        print(1)
        return

    lst = erastosthenes(N)
    plist = [i for i in range(3, N + 1, 2) if lst[i]]
    plist = [2] + plist

    mod = 1000000007
    ans = 1
    for p in plist:
        cnt = 0
        i = 1
        while 1:
            x = p ** i
            if x > N:
                break
            cnt += N // x
            i += 1
        ans = ans * (cnt + 1) % mod
    print(ans)

def erastosthenes(n):
    prime = [0, 1] * ((n + 1) // 2)
    if not n % 2:
        prime += [0]
    prime[1], prime[2] = 0, 1

    sqrt = n ** 0.5
    i = 3
    while i <= sqrt:
        for j in range(i ** 2, n + 1, i):
            prime[j] = 0
        i += 2
    return prime

main()

Submission status: Accepted

Solution code:
n = int(input())

a = [0] * (n+1)
for i in range(1, n+1):
    d = 2
    while d <= i:
        #print(str(d)+"を"+str(i)+"で割る")
        if i%d == 0:
            #print("割れた")
            a[d] += 1
            i /= d
            d = 2
        else:
            #print("割れない")
            d += 1

ans = 1
for i in range(n+1):
    ans *= (a[i]+1)
print(ans%(10**9+7))

Submission status: Accepted

Solution code:
n = int(input())
sum = 1
dict = {}
for i in range(2, n+1):
    j = 2
    while i > 1:
        if i%j == 0:
            i = i//j
            if j in dict:
                dict[j] += 1
            else:
                dict[j] = 1
            j -= 1
        j += 1
for i in dict.values():
    sum *= (i+1)
print(sum%1000000007)

Submission status: Accepted

Solution code:
n = int(input())
ans = 1
r = [1] * (n + 1)
s = n


for i in range(1, n + 1):
    p = i
    while p % 2 == 0:
        p = p // 2
        r[1] += 1

    for j in range(3, i + 1, 2):
        while p % j == 0:
            p = p // j
            r[j-1] += 1

for k in range(n+1):
    ans *= r[k]

ans = ans % (10 ** 9 + 7)
print(ans)