今天看到了九位累进可除数觉得有意思就做了一下.以下是过程.
累进可除数(英:Polydivisible number)是有以下特质的整数:首个位非零,而且由它首n个位组成的数是n的倍数。
例如345654:
1|3
2|34
3|345
4|3456
而123456就非累进可除数,因为1234不是4的倍数。
累进可除数是趣味数学上的一道名题的一般化:
用1至9排列成一个数,使其首2个位能被2除尽,首3个位能被3除尽,如此类推,整个数是9的倍数。
虽然9位的累进可除数有2492个,但唯一一个包含1至9的数字而不重复的只有一个,是381 654 729。
/* *coding:Yovae 2011-5-11 *www.yovae.com */ #include <stdio.h> #include <math.h> #include <time.h> int main() { int i,j,t,c[10],d[10]={0},flag,start; start=clock(); for(c[1]=1;c[1]<=9;c[1]++) { for(c[2]=1;c[2]<=9;c[2]++) { if(c[2]==c[1]) continue; for(c[3]=1;c[3]<=9;c[3]++) { if(c[3]==c[2]||c[3]==c[1]) continue; for(c[4]=1;c[4]<=9;c[4]++) { if(c[4]==c[3]||c[4]==c[2]||c[4]==c[1]) continue; for(c[5]=1;c[5]<=9;c[5]++) { if(c[5]==c[4]||c[5]==c[3]||c[5]==c[2]||c[5]==c[1]) continue; for(c[6]=1;c[6]<=9;c[6]++) { if(c[6]==c[5]||c[6]==c[4]||c[6]==c[3]||c[6]==c[2]||c[6]==c[1]) continue; for(c[7]=1;c[7]<=9;c[7]++) { if(c[7]==c[6]||c[7]==c[5]||c[7]==c[4]||c[7]==c[3]||c[7]==c[2]||c[7]==c[1]) continue; for(c[8]=1;c[8]<=9;c[8]++) { if(c[8]==c[7]||c[8]==c[6]||c[8]==c[5]||c[8]==c[4]||c[8]==c[3]||c[8]==c[2]||c[8]==c[1]) continue; for(c[9]=1;c[9]<=9;c[9]++) { if(c[9]==c[8]||c[9]==c[7]||c[9]==c[6]||c[9]==c[5]||c[9]==c[4]||c[9]==c[3]||c[9]==c[2]||c[9]==c[1]) { continue; } else { for(i=1,t=0,flag=1;i<=9;i++) { t=0; for(j=i;j>=1;j--) { t+=(int)c[j]*pow(10,i-j); } if(t%i!=0) { flag=0; goto next; } } next: if(flag==1) { for(i=1;i<=9;i++) { printf("%d",c[i]); } printf("\n"); } } } } } } } } } } } printf("---Total time:%fs\n",double(clock()-start)/1000); return 0; }
转载请注明:Yovae Studio » 九位累进可除数