| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:求教,那里错了In Reply To:求教,那里错了 Posted by:SHP00001 at 2007-08-25 13:38:11 > #include<stdio.h>
> #include<math.h>
> #include<string.h>
> #include<stdlib.h>
> #define MAX 150000
> int prime[MAX],gp[MAX][2],flag[MAX],d[MAX];
> void comput(int num)
> {
> int big,little;
> flag[num]=1;
> big=sqrt(prime[num]);
> little=sqrt(prime[num]-big*big);
> gp[num][0]=little;
> gp[num][1]=big;
> }
> void eld()
> {
> int i,j,k,num;
> prime[0]=2;
> flag[0]=1;
> prime[1]=3;
> gp[1][0]=3;
> gp[1][1]=0;
> gp[0][0]=1;
> gp[0][1]=1;
> num=2;
> for(i=4;i<1000000;i++)
> {
> k=0;
> for(j=0;prime[j]<=sqrt(i);j++)
> {
> if(i%prime[j]==0)
> {
> k=1;
> break;
> }
> }
> if(k==0)
> {
> prime[num]=i;
> if(i%4==1)
> comput(num);
> else
> {
> gp[num][0]=prime[num];
> gp[num][1]=0;
> }
> num++;
> }
> if(num>=MAX)
> break;
> }
> }
> int cmp(const void *a, const void *b)
> {
> int *p,*q,flag,i,j;
> p=(int *)a;
> q=(int *)b;
> i=*p;
> j=*q;
> if(gp[i][0]==gp[j][0])
> {
> flag=gp[i][1]-gp[j][1];
> }
> else
> {
> flag=gp[i][0]-gp[j][0];
> }
> return flag;
> }
> int main()
> {
> int i,j,k,m,n,top;
> memset(flag,0,sizeof(flag));
> k=0;
> eld();
> while(scanf("%d",&n)!=EOF)
> {
> k++;
> top=0;
> if(n==1)//个人感觉不可能是1,我试了几次1的时候不输出,或输出1,或输出,j,-j都wa。。
> printf("Case #%d: j, -j\n",k);
> else{
> printf("Case #%d:",k);
> for(i=0;;i++)
> {
> if(n==1)
> break;
> else
> {
> j=0;
> while(1)
> {
> if(n%prime[i]!=0)
> break;
> if(n%prime[i]==0)
> {
> j=1;
> n=n/prime[i];
> }
> }
> if(j==1)
> {
> d[top]=i;
> top++;
> }
> }
> }
> qsort(d,top,sizeof(d[0]),cmp);
> for(j=0;j<top;j++)
> {
> i=d[j];
> if(j!=0)
> printf(",");
> if(flag[i]==1)
> {
> if(gp[i][1]==1)
> {
> printf(" %d+j, %d-j",gp[i][0],gp[i][0]);
> }
> else
> {
> printf(" %d+%dj, %d-%dj",gp[i][0],gp[i][1],gp[i][0],gp[i][1]);
> }
> }
> else
> {
> printf(" %d",prime[i]);
> }
> }
> printf("\n");
> }
> }
> return 0;
> }
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator