题目1:阶乘因式分解(一)
给定两个数m,n,其中m是一个素数。
将n(0<=n<=10000)的阶乘分解质因数,求其中有多少个m。
在n*n方阵里填入1,2,...,n*n,要求填成蛇形。例如n=4时方阵为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
给定两个数m,n,其中m是一个素数。
将n(0<=n<=10000)的阶乘分解质因数,求其中有多少个m。
例:n=16,m=2,则输出15
在n*n方阵里填入1,2,...,n*n,要求填成蛇形。例如n=4时方阵为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
输入n,输出方阵
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
#define CHOISE 0
#if CHOISE
int analysis(int n,int m)
{
int sum=0;
while (n!=0)
{
sum += n/m;
n = n/m;
}
return sum;
}
int main(void)
{
int n,m,res;
printf("please input n and m\n");
scanf("%d %d",&n,&m);
res = analysis(n,m);
printf("the count is %d\n",res);
return 0;
}
#else
void snakeArray(int a[][MAX],int n)
{
int x=0;
int y=n-1;
int val=1;
int i,j;
while (val<=n*n)
{
while (x<n && !a[x][y])
a[x++][y] = val++;
x--,y--;
while (y>-1 && !a[x][y])
a[x][y--] = val++;
x--,y++;
while (x>-1 && !a[x][y])
a[x--][y] = val++;
x++,y++;
while (y<n && !a[x][y])
a[x][y++] = val++;
x++,y--;
}
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
printf("%3d",a[i][j]);
printf("\n");
}
}
int main(void)
{
int n;
int a[MAX][MAX];
memset(a,0,sizeof(a));
printf("please input the number:\n");
scanf("%d",&n);
snakeArray(a,n);
return 0;
}
#endif