Beispiel #1
0
def solve_2(cap,mod=10**9+7):
 f = quad_factor_range(1,0,1,cap+1)
 s = 0
 for i in xrange(1,cap+1):
   comb_factors(f[i-1],f[i+1])
   r = 1
   for p in f[i-1]:
     r = (r * (pow(p,f[i-1][p],mod)+1)) % mod 
   s += r
   while s > mod:
    s -= mod
   s = (s - i**4-4)%mod
 return s
Beispiel #2
0
def solve(N,mod=10**9+7):
 #Assumes a prime modulus
 f,primes = factor_range(N,primes=True)
 curr_fact = {p:0 for p in primes}
 s = 0
 R = 1
 mul_dict = {}
 for i in xrange(1,N/2+1):
  f1 = f[N+1-i] #mult
  f2 = f[i] #div
  
  for p in f1:
   if p in mul_dict:
    mul_dict[p] += f1[p]
   else:
    mul_dict[p] = f1[p]
  
  for p in f2:
   if p in mul_dict:
    mul_dict[p] -= f2[p]
   else:
    mul_dict[p] = -f2[p]
  
  
  
  mul = 1
  for p in mul_dict:
   if curr_fact[p]+mul_dict[p]:
    mul = (mul*(pow(p,curr_fact[p]+mul_dict[p],mod)+1))%mod
   if curr_fact[p]:
     mul = (mul * pow(pow(p,curr_fact[p],mod)+1,mod-2,mod)) % mod
  
  if not mul:
    continue
    
  R = (mul*R)%mod
  if N%2==0 and 2*i==N:
   s = s+R
  else:
   s = s+2*R
  while s > mod:
   s -= mod
  comb_factors(curr_fact,mul_dict)
  mul_dict = {}
 
 return (s+2 - pow(2,N,mod))%mod