这题目以前搞acm写过,,发个c写的代码- #include <stdio.h>
- #include <string.h>
- #include <math.h>
- #define MAX 40000
- struct node
- {
- int x,y;
- }s[40000];
- int a[MAX];
- void prime()
- {
- int i,j;
- memset(a,0,sizeof(a));
- for(i=2;i<=MAX;i++)
- {
- if(a[i]==0)
- {
- for(j=2;j*i<=32000;j++)
- a[i*j]=1;//不是素数标记为1
- }
- }
- }
- int main()
- {
- int n,i,j,k,num;
- prime();
- while(scanf("%d",&n)!=EOF)
- {
- k=sqrt(n);num=0;
- if(n==1)
- {
- printf("1 = 1\n");
- continue;
- }
- printf("%d = ",n);
- for(i=2;i<=k;i++)
- {
- if(n%i==0&&a[i]==0)
- {
- j=1;
- while(1)
- {
- n=n/i;
- if(n%i)
- break;
- j++;
- }
- s[num].x=i;
- s[num++].y=j;
- k=sqrt(n);
- }
- }
- if(n!=1)
- {
- s[num].x=n;
- s[num++].y=1;
- }
- for(i=0;i<num;i++)
- {
- if(i==0)
- {
- if(s[i].y==1)
- printf("%d",s[i].x);
- else
- printf("%d^%d",s[i].x,s[i].y);
- }
- else
- {
- if(s[i].y==1)
- printf(" * %d",s[i].x);
- else
- printf(" * %d^%d",s[i].x,s[i].y);
- }
- }
- printf("\n");
- }
- return 0;
- }
复制代码 |