二项式系数nCk可以如下排成一个三角形,称为帕斯卡三角形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
.........
可以看出帕斯卡三角形的前八行包含了十二个不同的数:1, 2, 3, 4, 5, 6, 7, 10, 15, 20, 21 and 35。
如果正整数不被任何素数的平方整除,n就被称为无平方因子数。
在帕斯卡三角形前八行的十二个不同的数中,除了4和20之外都是无平方因子数。
这些不同的无平方因子数之和为105.
求帕斯卡三角形前51行所有不同的无平方因子数之和。
代码:
#include <stdio.h>
int count(int n,int k){//计算每一位置的数
if(k==0||k==n) return 1;
else
return count(n-1,k-1)+count(n-1,k);
}
int sushu(int n){//判断是否为素数
for(int i=2;i<n;i++){
if(n%i==0) {
return 0;
}
}
return 1;
}
int yinzi(int n){//判断是否为无平方因子数
for(int i=2;i*i<=n;i++){
if(sushu(i)==1 &&n%(i*i)==0){
return 0;
}
}
return 1;
}
int main()
{
int sum=0;
int a[100][100]={0};
for(int i=0;i<8;i++)
{
for(int j=0;j<=i/2;j++)
{
a[i][j]=count(i,j);
//printf("%d ",a[i][j]);
for(int k=0;k<i;k++)
{
for(int m=0;m<=k/2;m++)
{
if(a[i][j]==a[k][m])
a[i][j]=0; //把后面与前面重复的数置为0
}
}
}
}
for(int i=0;i<8;i++)
{
for(int j=0;j<=i/2;j++){
if(yinzi(a[i][j])==1)
{
sum+=a[i][j];
}
}
}
printf("%d",sum);
return 0;
}