HEU 5084 ACM(Array Complicated Manipulation)

/**************************************
Problem: HEU 5084 ACM(Array Complicated Manipulation)
Time: 0.2200 s
Memory: 592 k 
Accepted Time: 2009-05-20 16:10:25
Tips: 
证明:
http://hi.baidu.com/5l2_/blog/item/8c1e51dcb72511a7cd11662b.html
代码:
http://hi.baidu.com/54xiaoke/blog/item/12ed933f9d8b11c47d1e71ef.html
*************************************
*/

#include 
<stdio.h>
#include 
<string.h>
#include 
<math.h>
#define MAX 65536
bool div(char *p,int n)
{
    
char temp[1000];
    
int i,sum=0,len=0;
    
for(i=0;p[i]!=0;i++)
    
{
        sum
=sum*10+p[i]-'0';
        temp[len
++]=sum/n+'0';
        sum
%=n;
    }

    temp[len]
=0;
    
if(sum==0)
    
{
        
for(i=0;temp[i]=='0';i++);
        strcpy(p,temp
+i);
        
return 1;
    }

    
else return 0;
}

int main()
{
    
bool num[MAX+1];
    
int prime[MAX],len=0,i,j;
    
double t=sqrt(MAX);
    memset(num,
1,sizeof(num));
    
for(i=2;i<t;i++)
    
{
        
if(num[i])
        
{
            
for(j=2;i*j<=MAX;j++)num[i*j]=0;
        }

    }

    
for(i=2;i<=MAX;i++)
    
{
        
if(num[i])prime[len++]=i;
    }

    
char str[1000];
    
while(scanf("%s",str),strcmp(str,"0")!=0)
    
{
        
if(strcmp(str,"1")==0)
        
{
            printf(
"no\n");
            
continue;
        }

        
int count;
        
for(i=0;i<len;i++)
        
{
            count
=0;
            
while(div(str,prime[i]))
            
{
                count
++;
                
if(count>=2)break;
            }

            
if(count>=2)break;
        }

        
if(count>=2)printf("no\n");
        
else printf("yes\n");
    }

    
return 0;
}

posted @ 2009-05-21 15:01  主函数  阅读(365)  评论(0编辑  收藏  举报