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;
}
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;
}