吉尔布雷斯的有趣猜测
用python打印出如下图三角形
参考文献
单墫老师教你学数学 趣味数论
用python打印出如下图三角形
单墫老师教你学数学 趣味数论
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61]
[1, 2, 2, 4, 2, 4, 2, 4, 6, 2, 6, 4, 2, 4, 6, 6, 2]
[1, 0, 2, 2, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 0, 4]
[1, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 2, 4]
[1, 2, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 2, 2]
[1, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 2, 0]
[1, 2, 0, 0, 2, 2, 0, 0, 2, 2, 2, 2]
[1, 2, 0, 2, 0, 2, 0, 2, 0, 0, 0]
[1, 2, 2, 2, 2, 2, 2, 2, 0, 0]
[1, 0, 0, 0, 0, 0, 0, 2, 0]
[1, 0, 0, 0, 0, 0, 2, 2]
[1, 0, 0, 0, 0, 2, 0]
[1, 0, 0, 0, 2, 2]
[1, 0, 0, 2, 0]
[1, 0, 2, 2]
[1, 2, 0]
[1, 2]
[1]
import numpy as np
numbers = np.arange(1,65)
length = len(numbers)
n_max = int(np.sqrt(length))
is_prime = np.ones(length,dtype = bool)
is_prime[0] = False
for i in range(2,n_max):
if i in numbers[is_prime]:
is_prime[(i**2-1)::i] = False
prime = numbers[is_prime].tolist()
print(prime,end="")
row=[]
result=[]
for j in range(len(prime)):
for i in range(len(prime)-1):
row.append(np.abs(prime[i]-prime[i+1]))
prime = row
result.append(prime)
if len(row) < 2 :
break
else:
row = []
r = 4
for i in result:
print("\n" + (2*r-1) * " " + str(i),end=" ")
r += 1
C语言实现效果:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int isPrime(int n)
{
static int d=2;
return n<d*d ? (d=2,1): n%d ? (d+=1+(d>2),isPrime(n)) : (d=2,0);
}
int main(int argc, char *argv[])
{
int n=0,index=0;
scanf("%d",&n);
int array[n];
for(int i=2; ;i++)
{
if(isPrime(i)){
array[index]=i;
index++;
}
if(index==n)
break;
}
for(int i=0;i<n;i++)
printf("%d ",array[i]);
for(int i=0;i<n;i++){
printf("\n");
for(int j=0;j<n-1-i;j++){
array[j]=abs(array[j+1]-array[j]);
}
for(int k=0;k<=i;k++){
printf(" ");
}
for(int j=0;j<n-1-i;j++){
printf("%d ",array[j]);
}
}
return 0;
}