xiugakei 发表于 2012-8-17 23:34:19

求c代码:输入一个n,输出一个二维数组。。。

求c代码:输入一个n,输出一个二维数组
输入一个偶数n,6<n<19680;
输出二维数组a

比如n=42
则输出
8 3 0 0 0 0 0 0 0
3 3 1 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0

其中
a=8   (因为42等于8组 素数+素数 :42=5+37         42=11+31   42=13+29   42=19+23
42=23+1942=29+11   42=31+11   42=37+5)
a=3   (因为42等于3组 素数+质因数数量为2的数 :42=3+3942=7+3542=17+25)
a=3   (因为42等于3组 质因数数量为2的数+素数 :42=39+342=35+742=25+17)
a=3    (因为42等于3组 质因数数量为2的数+质因数数量为2的数 :42=9+33   42=21+2142=33+9)
a=1    (因为42等于1组 素数+质因数数量为3的数 :42=15+27)
a=1    (因为42等于1组 质因数数量为3的数+素数 :42=27+15)
其他为0

就是把n分拆成为2个奇数,其中n=1+(n-1)和n=(n-1)+1这两个情况不考虑。
把分成的这两个奇数,分别求质因数数量
如3,5,7   ,11这些素数,就是质因数数量为1的数
如65=5*13,49=7*7 ,93=3*31 这些就是质因数数量为2的数
余此类推。
n<19682是因为3^9=19683,如果大于此数,则需要a的数组了。

xiugakei 发表于 2012-8-18 13:00:44

程序前面是#include   <stdio.h>

int   main()
{
int   a   =   {0};
int   i,   j;
int n;
printf("请输入一个大于6的偶数:\n");
scanf("%ld", &n);
printf("%d[]=:\n",n); 后面是for   (i=0;   i <9;   i++)
{
for   (j=0;   j <9;   j++)
printf( "%2d ",   a);
printf( "\n ");
}

}

xiugakei 发表于 2012-8-18 19:55:49

附上求n的质因子数的函数pn(n)int pn(int n)
{
int i,t=1;
for(i=2;i<=n;i++)
{
while(n!=i)
{
if(n%i==0)
{
n/=i;t++;
}
else
break;
}
}
return (t);
}

xiugakei 发表于 2012-8-18 21:09:12

2楼和3楼只是我编程时的一些代码,各位不一定按照这个来,用自己的方法,能得到正确答案就行。

mathematica 发表于 2012-8-23 16:10:10

背景背景,问题的背景很重要!

xiugakei 发表于 2012-8-27 16:06:41

问题的背景:
a=是哥德巴赫分拆数
从将偶数分拆为2个奇数,看看这些奇数对的内部规律。
页: [1]
查看完整版本: 求c代码:输入一个n,输出一个二维数组。。。