2018.7.12训练赛 -K
水题
判断素数
因为范围是到16位,所以可以用long long存储
然后判断是否为素数就ok了。
但我提交之后显示10个测试样例通过了9个.......原因是下面标红的部分。
埃氏筛法:若a是合数,则必有不可约数P<=根号a,使p|a。
我是折在这个等号上。
代码如下:
1 #include <stdio.h> 2 #include <stdlib.h> 3 typedef long long LL; 4 int Mil(LL n); 5 6 int main() 7 { 8 long long x,y,z; 9 int a; 10 while(scanf("%lld",&x)==1){ 11 y=x; 12 if((y%10)==0){ 13 printf("no\n"); 14 continue; 15 } 16 else { 17 z=0; 18 do{ 19 a=y%10; 20 y/=10; 21 if((a!=3)&&(a!=4)&&(a!=7)){ 22 if(a==6) z=z*10+9; 23 else if(a==9) z=z*10+6; 24 else z=z*10+a; 25 } 26 }while((a!=3)&&(a!=4)&&(a!=7)&&(y!=0)); 27 if((a==3)||(a==4)||(a==7)){ 28 printf("no\n"); 29 continue; 30 } 31 } 32 if(Mil(x)&&Mil(z)) 33 printf("yes\n"); 34 else printf("no\n"); 35 } 36 return 0; 37 } 38 int Mil(LL n) 39 { 40 LL i; 41 if(n==1) return 0; 42 if(n==2) return 1; 43 if(n%2==0) return 0; 44 for(i=3;i*i<=n;i+=2){ 45 if(n%i==0) return 0; 46 } 47 return 1; 48 }