Advertisement
Go-Ice

ZeroJudge [a010: 因數分解] by Go-Ice

Apr 22nd, 2015
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.53 KB | None | 0 0
  1. #include <math.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. void listPrime();
  5. void resetArray();
  6.  
  7. int main(){
  8.     int input;          /* input number(1 < n <= 1000000)*/
  9.     int index;          /* array index */
  10.     int factorAmount;   /* amount of factors */
  11.     int prime[169];     /* list of prime numbers */
  12.     int power[169];     /* factors' power (169 prime number between 1 to 1000) */
  13.  
  14.     listPrime( &prime[0] );
  15.  
  16.     while ( scanf("%d", &input)==1 ){
  17.         /* reset variables */
  18.         resetArray( &power[0] );
  19.         factorAmount = 0;
  20.  
  21.         for ( index=1 ; index<169 ; index++ ){
  22.             if ( input%prime[index] == 0 ){
  23.                 power[index]++;
  24.                 input /= prime[index];
  25.                 index = 0;
  26.             }
  27.  
  28.             if ( input ==  1 )
  29.                 break;
  30.         } /* END for */
  31.  
  32.         for ( index=1 ; index<169 ; index++ ){
  33.             if ( power[index] == 1 ){
  34.                 if ( factorAmount >= 1 )
  35.                     printf(" * ");
  36.  
  37.                 printf("%d", prime[index]);
  38.                 factorAmount++;
  39.             } /* END outer if */
  40.  
  41.             else if ( power[index] > 1 ){
  42.                 if ( factorAmount >= 1 )
  43.                     printf(" * ");
  44.  
  45.                 printf("%d^%d", prime[index], power[index]);
  46.                 factorAmount++;
  47.             } /* END else if */
  48.         } /* END printer for */
  49.  
  50.         if ( input != 1 ){
  51.             if ( factorAmount >= 1 )
  52.                 printf(" * ");
  53.  
  54.             printf("%d", input);
  55.         }
  56.  
  57.         printf("\n");
  58.     } /* END outer while */
  59.  
  60.     system("PAUSE");
  61.     return 0;
  62. } /* END main */
  63.  
  64. void listPrime( int *array ){
  65.     int number;
  66.     int divisor;
  67.     int isPrime;        /* flag of prime number */
  68.     int sqrtAns;        /* answer of sqrt(Number) */
  69.  
  70.     /* set first 3 prime number */
  71.     *array++ = 1;
  72.     *array++ = 2;
  73.     *array++ = 3;
  74.  
  75.     /* make a list of prime numbers(1<n<1000) */
  76.     for ( number=5 ; number<=1000 ; number+=2 ){
  77.         isPrime = 1;    /* reset flag */
  78.  
  79.         sqrtAns = sqrt((double)number);
  80.         for ( divisor=3 ; divisor<=sqrtAns ; divisor+=2 ){
  81.             if( number%divisor == 0 ){
  82.                 isPrime = 0;
  83.                 break;
  84.             }
  85.         } /* END inner for*/
  86.  
  87.         if ( isPrime )
  88.             *array++ = number;
  89.     } /* END outer for */
  90. } /* END void listPrime() */
  91.  
  92. void resetArray( int *array ){
  93.     int cnt;
  94.     for ( cnt=0 ; cnt<169 ; cnt++ )
  95.         *array++ = 0;
  96. } /* END void resetArray() */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement