Added solutions for N=60-80
parent
31d10072bf
commit
294d48872c
|
@ -0,0 +1,53 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
from math import sqrt
|
||||
|
||||
def cynical():
|
||||
#main
|
||||
i=1+int((2+sqrt(4+12*1009))/6)
|
||||
o=3*i**2-2*i
|
||||
while o<10000:
|
||||
base=(o-(o//100)*100)*100
|
||||
if base>=1000:
|
||||
a=curse(base,o//100,[])
|
||||
if a!=False:
|
||||
return a+[o]
|
||||
i+=1
|
||||
o=3*i**2-2*i
|
||||
return False
|
||||
|
||||
def curse(base,last,sit):
|
||||
#recursive
|
||||
if len(sit)==4:
|
||||
if fig(base+last)!=False and not(fig(base*100+last) in sit):
|
||||
return [base+last]
|
||||
else:
|
||||
i=10
|
||||
while i<100:
|
||||
if fig(base+i)!=False and not(fig(base+i) in sit):
|
||||
a=curse(i*100,last,sit+[fig(base+i)])
|
||||
if a!=False:
|
||||
return a+[base+i]
|
||||
i+=1
|
||||
return False
|
||||
|
||||
def fig(x):
|
||||
#pocekira ce je x katera izmed figurative stevil
|
||||
if int(sqrt(x))==sqrt(x):
|
||||
return 2
|
||||
k=(1+sqrt(1+24*x))/3
|
||||
if int(k)==k:
|
||||
return 3
|
||||
k=sqrt(1+8*x)
|
||||
if int(k)==k:
|
||||
k=(1+sqrt(1+8*x))/4
|
||||
if int(k)==k:
|
||||
return 4
|
||||
return 1
|
||||
k=(3+sqrt(9+40*x))/5
|
||||
if int(k)==k:
|
||||
return 5
|
||||
return False
|
||||
|
||||
if __name__ == '__main__':
|
||||
print(sum(cynical()))
|
|
@ -0,0 +1,31 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
def cube(x):
|
||||
i=3
|
||||
lim=100
|
||||
while True:
|
||||
cubes=[]
|
||||
while i**3<lim:
|
||||
cubes.append(i**3)
|
||||
i+=1
|
||||
lim*=10
|
||||
perm={}
|
||||
ans=[]
|
||||
ans_route={}
|
||||
for j in cubes:
|
||||
a="".join(sorted(str(j)))
|
||||
try:
|
||||
perm[a][0]+=1
|
||||
if perm[a][0]==x:
|
||||
ans.append(perm[a][1])
|
||||
ans_route[perm[a][1]]=a
|
||||
except:
|
||||
perm[a]=[1,j]
|
||||
|
||||
if len(ans)>0:
|
||||
for i in sorted(ans):
|
||||
if perm[ans_route[i]][0]==x:
|
||||
return i
|
||||
|
||||
if __name__ == '__main__':
|
||||
print(cube(5))
|
|
@ -0,0 +1,39 @@
|
|||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
|
||||
int sq_frac(int x);
|
||||
|
||||
int N = 10000;
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int i, c;
|
||||
|
||||
c = 0;
|
||||
for(i = 1; i <= N; ++i){
|
||||
if(sq_frac(i) % 2 == 0){
|
||||
++c;
|
||||
}
|
||||
}
|
||||
printf("%d\n", c);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sq_frac(int x)
|
||||
{
|
||||
int m, n, d, a, c;
|
||||
|
||||
if((m = sqrt(x)) * m == x){
|
||||
return 1;
|
||||
}
|
||||
d = c = 1;
|
||||
n = m;
|
||||
do{
|
||||
d = (x - n * n) / d;
|
||||
a = (n + m) / d;
|
||||
n = a * d - n;
|
||||
++c;
|
||||
}while(d != 1);
|
||||
return c;
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
def nth_con(x):
|
||||
# 212 114 116 118
|
||||
if not x % 3:
|
||||
n = 1
|
||||
d = 0
|
||||
else:
|
||||
n = x % 3
|
||||
d = 1
|
||||
for m in range(2 * (x // 3), 2, -2):
|
||||
n, d = 2*m*n + 2*d + n, m*n + n + d
|
||||
return 8*n + 3*d, 2*n + d + n
|
||||
|
||||
if __name__ == '__main__':
|
||||
print(sum(map(int, list(str(nth_con(100)[0])))))
|
|
@ -0,0 +1,58 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
from math import sqrt
|
||||
|
||||
def main(d):
|
||||
mx = 0
|
||||
my = 0
|
||||
md = 0
|
||||
for cd in range(2, d + 1):
|
||||
x, y = diop(cd)
|
||||
#print("{} -> {}, {}".format(cd, x, y))
|
||||
if x > mx:
|
||||
mx = x
|
||||
my = y
|
||||
md = cd
|
||||
return md, mx, my
|
||||
|
||||
def diop(d):
|
||||
sol = []
|
||||
a, f = sq_frac(d)
|
||||
f.reverse()
|
||||
if len(f) == 0:
|
||||
return 0, 0
|
||||
for i in f:
|
||||
for j in range(len(sol)):
|
||||
sol[j][0], sol[j][1] = sol[j][0] * i + sol[j][1], sol[j][0]
|
||||
sol.append([i, 1])
|
||||
r = fits(a, sol, d)
|
||||
while r == 0:
|
||||
for i in f:
|
||||
for j in range(len(sol)):
|
||||
sol[j][0], sol[j][1] = sol[j][0] * i + sol[j][1], sol[j][0]
|
||||
r = fits(a, sol, d)
|
||||
return r
|
||||
|
||||
def fits(a, pairs, d):
|
||||
for x, y in pairs[::-1]:
|
||||
x, y = a * x + y, x
|
||||
if x**2 - d * y**2 == 1:
|
||||
return x, y
|
||||
return 0
|
||||
|
||||
def sq_frac(x):
|
||||
f = []
|
||||
m = int(sqrt(x))
|
||||
if m**2 == x:
|
||||
return m, f
|
||||
d = x - m**2
|
||||
f.append((2 * m) // d)
|
||||
n = f[-1] * d - m
|
||||
while d != 1:
|
||||
d = (x - n**2) // d
|
||||
f.append((n + m) // d)
|
||||
n = f[-1] * d - n
|
||||
return m, f
|
||||
|
||||
if __name__ == '__main__':
|
||||
print(main(1000)[0])
|
|
@ -0,0 +1,40 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
def m5gon(x, i, mx):
|
||||
r = []
|
||||
m = [[] for _ in range(5)]
|
||||
for a, b in enumerate(range(i-x-1, (i-x)//2, -1), 1):
|
||||
if a > mx:
|
||||
break
|
||||
elif b > mx or a == x or b == x:
|
||||
continue
|
||||
m[0] = [x, a, b]
|
||||
for ci, c in enumerate(range(i-b-1, 0, -1), 1):
|
||||
if ci > mx:
|
||||
break
|
||||
elif c > mx or len(set([a, b, x, ci, c])) < 5:
|
||||
continue
|
||||
m[1] = [ci, b, c]
|
||||
for di, d in enumerate(range(i-c-1, 0, -1), 1):
|
||||
if di > mx:
|
||||
break
|
||||
elif d > mx or len(set([a, b, x, c, ci, d, di])) < 7:
|
||||
continue
|
||||
m[2] = [di, c, d]
|
||||
for ei, e in enumerate(range(i-d-1, 0, -1), 1):
|
||||
if ei > mx:
|
||||
break
|
||||
elif e > mx or len(set([a, b, x, c, ci, d, di, e, ei, i-e-a])) < 10 or i-e-a > mx:
|
||||
continue
|
||||
m[3] = [ei, d, e]
|
||||
m[4] = [i-e-a, e, a]
|
||||
st = m.index(sorted(m, key = lambda y: y[0])[0])
|
||||
m = m[st:] + m[:st]
|
||||
if m[0][1] < m[0][2]:
|
||||
m = list(map(lambda y: (y[0], y[2], y[1]), [m[0]] + m[::-1][:-1]))
|
||||
r.append(''.join([''.join(map(str, y)) for y in m]))
|
||||
return r
|
||||
|
||||
if __name__ == '__main__':
|
||||
print(max(m5gon(10, i, 10) for i in range(10, 25))[0])
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
|
||||
#define LIM 3 * 1000000
|
||||
#define MAX_CHAIN 100
|
||||
|
||||
void initf(int f[]);
|
||||
void init_sieve(char s[], int len);
|
||||
long next_term(long x, int f[]);
|
||||
|
||||
int main()
|
||||
{
|
||||
int x = pow(10, 6);
|
||||
int y = 60;
|
||||
int c, len, count;
|
||||
long i, n;
|
||||
long chain[MAX_CHAIN];
|
||||
int f[10];
|
||||
char sieve[LIM];
|
||||
|
||||
initf(f);
|
||||
init_sieve(sieve, LIM);
|
||||
count = 0;
|
||||
|
||||
for(i = 3; i < x; ++i){
|
||||
c = len = 0;
|
||||
n = i;
|
||||
while(n >= LIM || !sieve[n]){
|
||||
if(c < MAX_CHAIN){
|
||||
chain[c] = n;
|
||||
++len;
|
||||
}
|
||||
n = next_term(n, f);
|
||||
++c;
|
||||
}
|
||||
c += sieve[n];
|
||||
if(c == y){
|
||||
++count;
|
||||
}
|
||||
for(n = 0; n < len; ++n){
|
||||
if(chain[n] < LIM){
|
||||
sieve[chain[n]] = c;
|
||||
}
|
||||
--c;
|
||||
}
|
||||
|
||||
}
|
||||
printf("%d\n", count);
|
||||
return 0;
|
||||
}
|
||||
|
||||
long next_term(long x, int f[])
|
||||
{
|
||||
long r;
|
||||
int i, d;
|
||||
r = 0;
|
||||
for(i = pow(10, (int) log10(x)); i >= 1; i /= 10){
|
||||
d = x / i;
|
||||
r += f[d];
|
||||
x -= d * i;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
void initf(int f[])
|
||||
{
|
||||
int i;
|
||||
f[0] = f[1] = 1;
|
||||
for(i = 2; i < 10; ++i){
|
||||
f[i] = i * f[i - 1];
|
||||
}
|
||||
}
|
||||
|
||||
void init_sieve(char s[], int len)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i = 0; i < len; ++i){
|
||||
s[i] = 0;
|
||||
}
|
||||
s[1] = s[2] = s[145] = s[40585] = 1;
|
||||
s[871] = s[45361] = s[872] = s[45362] = 2;
|
||||
s[169] = s[363601] = s[1454] = 3;
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
|
||||
int gcd(int a, int b);
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int lim = 1500000;
|
||||
int i, n, m, p, c, odd;
|
||||
char sieve[lim + 1];
|
||||
|
||||
for(i = 0; i <= lim; ++i){
|
||||
sieve[i] = 0;
|
||||
}
|
||||
odd = c = 0;
|
||||
for(n = 2; n <= (sqrt(2*lim + 1) - 1)/ 2; ++n){
|
||||
for(m = odd + 1; m < n && m <= (lim / 2*n) - n; m += 2){
|
||||
if(gcd(n, m) == 1){
|
||||
p = 2*n * (n + m);
|
||||
for(i = p; i <= lim; i += p){
|
||||
sieve[i] += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
odd = !odd;
|
||||
}
|
||||
for(i = 0; i <= lim; i += 2){
|
||||
if(sieve[i] == 1){
|
||||
++c;
|
||||
}
|
||||
}
|
||||
printf("%d\n", c);
|
||||
}
|
||||
|
||||
int gcd(int a, int b)
|
||||
{
|
||||
int c;
|
||||
while (a != 0){
|
||||
c = a; a = b%a; b = c;
|
||||
}
|
||||
return b;
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
#include <stdio.h>
|
||||
|
||||
int sums(int x);
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
printf("%d\n", sums(100));
|
||||
}
|
||||
|
||||
int sums(int x)
|
||||
{
|
||||
int i, n;
|
||||
int s[x + 1][x];
|
||||
|
||||
for(n = 0; n <= x; ++n){
|
||||
s[n][0] = 1;
|
||||
for(i = 2; i < n; ++i){
|
||||
s[n][i - 1] = s[n][i - 2];
|
||||
if(n - i <= i){
|
||||
s[n][i - 1] += s[n - i][n - i - 1];
|
||||
}else{
|
||||
s[n][i - 1] += s[n - i][i - 1];
|
||||
}
|
||||
}
|
||||
s[n][i - 1] = s[n][i - 2] + 1;
|
||||
}
|
||||
return s[x][x - 1] - 1;
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
from math import sqrt
|
||||
|
||||
def main(lim, x):
|
||||
sieve = [False, True] * (lim//2 + 1)
|
||||
primes = []
|
||||
sub_lim = int(sqrt(lim) + 1)
|
||||
count = [[1], [0], [1]]
|
||||
even = False
|
||||
for n in range(3, lim + 1):
|
||||
if sieve[n]:
|
||||
primes.append(n)
|
||||
for j in range(n**2, lim + 1, 2*n):
|
||||
sieve[j] = False
|
||||
count.append([int(even)])
|
||||
for i, p in enumerate(primes, 1):
|
||||
if p > n - p:
|
||||
count[n].append(count[n - p][-1] + count[n][-1])
|
||||
else:
|
||||
count[n].append(count[n - p][i] + count[n][-1])
|
||||
if count[n][-1] - int(sieve[n]) > x:
|
||||
return n, count[n][-1] - int(sieve[n])
|
||||
even = not even
|
||||
return False
|
||||
|
||||
if __name__ == '__main__':
|
||||
lim = 10**6
|
||||
x = 5000
|
||||
print(main(lim, x)[0])
|
|
@ -0,0 +1,29 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
def main(d):
|
||||
tbl = [1]
|
||||
n = 1
|
||||
while p(n, tbl) % d: n+=1
|
||||
return n, p(n,tbl)
|
||||
|
||||
def p(n, tbl=[1]):
|
||||
if n < 0:
|
||||
return 0
|
||||
if n >= len(tbl):
|
||||
r = -sum((-1)**i *
|
||||
(p(n-a, tbl) +
|
||||
p(n-b, tbl))
|
||||
for a,b,i in pentnum(n))
|
||||
tbl.append(r)
|
||||
return tbl[n]
|
||||
|
||||
def pentnum(bound):
|
||||
n = 1
|
||||
a,b = 1,2
|
||||
while a <= bound:
|
||||
yield a,b,n
|
||||
a += 3*n + 1
|
||||
b += 3*n + 2
|
||||
n += 1
|
||||
|
||||
print(main(10**6)[0])
|
16
makefile
16
makefile
|
@ -1,6 +1,18 @@
|
|||
all : 064 074 075 076 085
|
||||
|
||||
85 : 085_counting_rectangles.c
|
||||
064 : 064_odd_period_square_roots.c
|
||||
gcc 064_odd_period_square_roots.c -lm -o 064_odd_period_square_roots.exe
|
||||
|
||||
074 : 074_digit_factorial_chains.c
|
||||
gcc 074_digit_factorial_chains.c -lm -o 074_digit_factorial_chains.exe
|
||||
|
||||
075 : 075_singular_integer_right_triangles.c
|
||||
gcc 075_singular_integer_right_triangles.c -lm -o 075_singular_integer_right_triangles.exe
|
||||
|
||||
076 : 076_counting_summations.c
|
||||
gcc 076_counting_summations.c -o 076_counting_summations.exe
|
||||
|
||||
085 : 085_counting_rectangles.c
|
||||
gcc 085_counting_rectangles.c -lm -o 085_counting_rectangles.exe
|
||||
|
||||
clean :
|
||||
rm -f *.exe *.out
|
||||
|
|
Loading…
Reference in New Issue