Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

能不能帮看下错在哪?WA了好多次

Posted by wxnfifth at 2008-10-06 21:36:38 on Problem 3696
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
int m , phiM , rst;

void findRst()
{
    int i , j , k , sqrtPhiM , md , tmpI , tmp10;
    sqrtPhiM = ( int )( sqrt( ( double ) phiM ) + 1e-6 );
    for( i = 1; i <= sqrtPhiM; ++i ){
        tmpI = i , tmp10 = 10;
        if( phiM % tmpI == 0 ){
            md = 1;
            while( tmpI ){
                if( tmpI & 1 ){
                    md = ( ( long long ) ( md  ) * ( tmp10 ) ) % m;
                    }
                tmpI >>= 1;
                tmp10 = ( ( long long ) tmp10 * tmp10 ) % m;
            }
            if( md == 1 ) { rst = i ; return;}
        }
    }
    for( i = sqrtPhiM ; i >= 1; --i )
            if( phiM % i == 0 ){
            tmpI = phiM / i , tmp10 = 10;
            if( phiM % tmpI == 0 ){
                md = 1;
                while( tmpI ){
                    if( tmpI & 1 )
                        md = ( ( long long ) ( md  ) * ( tmp10 ) ) % m;
                    tmpI >>= 1;
                    tmp10 = ( ( long long ) tmp10 * tmp10 ) % m;
                }
                if( md == 1 ) { rst = phiM / i ; return;}
            }
        }
    while( 1 );
}


int main()
{
    int i , j , k , iCase, nCase , sqrtM;
    for( iCase = 0; scanf( "%d" , &m ) != EOF && m > 0 ; ++iCase ){
        printf( "Case %d: " , iCase + 1 );
        for( i = 0;  m % 2 == 0 && i < 3; ++i ){
            m /= 2;
        }
        if( m % 2 == 0 || m % 5 == 0 ){
            printf( "0\n" );
            continue;
        }
        phiM = m;
        if( m == 1 ) { printf( "1\n" ); continue; }
        sqrtM = (int )( sqrt( ( double )m ) + 1e-5 );
        for( i = 2; i <= sqrtM; ++i )
            if( i != 3 ){
                if( m % i == 0 ){
                    while( m % i == 0 )
                        m /= i;
                    phiM = phiM / i * ( i - 1 );
                }
            }
        if( m % 3 == 0 ){
            phiM *= 6;
        }
        else if ( m != 1 ){
            phiM = m - 1;
        }
        findRst();
        printf( "%d\n" , rst );
    }
}

    
        
        
                
                    
            

    


Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator