#include<iostream> #include<stdio.h> #include<string> #include<cstdlib> #include<math.h> #include<vector> #define prt(a) printf("%d\n",a); #define aaa printf("a\n"); #define bbb printf("b\n"); #define ccc printf("c\n"); typedef long long int LL; using namespace std; int*p; #define pdl 78499 int*d; int ddl=0; void znajdz_pierwsze(); bool sprawdz(LL&a,LL&b); void odczyt(LL&a,LL&b,int n); int main() { p=new int[pdl+10]; znajdz_pierwsze(); //for(int*w=p;w<p+pdl;w++) printf("%d ",*w); d=new int[15]; while((cin.peek()>=48)&&(cin.peek()<58)) { d[ddl]=getchar()-48; ddl++; } LL a,b; odczyt(a,b,0); //printf("%lld %lld\n",a,b); if(sprawdz(a,b)==true) { printf("TAK"); return 0; } for(int i=1;i<ddl-1;i++) { odczyt(a,b,i); //printf("%lld %lld\n",a,b); if(sprawdz(a,b)==true) { printf("TAK"); return 0; } } printf("NIE"); delete[]p; delete[]d; return 0; } void znajdz_pierwsze() { char*o=new char[1000010]; for(char*w=o+1000010;w>=o;w--) *w=1; for(char*w=o+2;(w-o)*(w-o)<1000010;w++) if(*w!=0) for(char*ww=o+2*(w-o);ww<o+1000010;ww+=(w-o)) *ww=0; int*wp=p; for(char*w=o+2;w<o+1000010;w++) if(*w==1) { *wp=w-o; wp++; } delete[]o; } bool sprawdz(LL&a,LL&b) { if((a==0)||(b==0)||(a==1)||(b==1)) return false; int*w=p; LL mx=(a>b)?a:b,mi=(a<b)?a:b; for(;*w**w<=mi;w++) if((a%*w==0)||(b%*w==0)) return false; for(;*w**w<=mx;w++) if(mx%*w==0) return false; return true; } void odczyt(LL&a,LL&b,int n) { a=0; b=0; int i=0; for(;i<=n;i++) { a*=10; a+=*(d+i); } if(*(d+i)==0) return; //zera wiodace for(;i<ddl;i++) { b*=10; b+=*(d+i); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | #include<iostream> #include<stdio.h> #include<string> #include<cstdlib> #include<math.h> #include<vector> #define prt(a) printf("%d\n",a); #define aaa printf("a\n"); #define bbb printf("b\n"); #define ccc printf("c\n"); typedef long long int LL; using namespace std; int*p; #define pdl 78499 int*d; int ddl=0; void znajdz_pierwsze(); bool sprawdz(LL&a,LL&b); void odczyt(LL&a,LL&b,int n); int main() { p=new int[pdl+10]; znajdz_pierwsze(); //for(int*w=p;w<p+pdl;w++) printf("%d ",*w); d=new int[15]; while((cin.peek()>=48)&&(cin.peek()<58)) { d[ddl]=getchar()-48; ddl++; } LL a,b; odczyt(a,b,0); //printf("%lld %lld\n",a,b); if(sprawdz(a,b)==true) { printf("TAK"); return 0; } for(int i=1;i<ddl-1;i++) { odczyt(a,b,i); //printf("%lld %lld\n",a,b); if(sprawdz(a,b)==true) { printf("TAK"); return 0; } } printf("NIE"); delete[]p; delete[]d; return 0; } void znajdz_pierwsze() { char*o=new char[1000010]; for(char*w=o+1000010;w>=o;w--) *w=1; for(char*w=o+2;(w-o)*(w-o)<1000010;w++) if(*w!=0) for(char*ww=o+2*(w-o);ww<o+1000010;ww+=(w-o)) *ww=0; int*wp=p; for(char*w=o+2;w<o+1000010;w++) if(*w==1) { *wp=w-o; wp++; } delete[]o; } bool sprawdz(LL&a,LL&b) { if((a==0)||(b==0)||(a==1)||(b==1)) return false; int*w=p; LL mx=(a>b)?a:b,mi=(a<b)?a:b; for(;*w**w<=mi;w++) if((a%*w==0)||(b%*w==0)) return false; for(;*w**w<=mx;w++) if(mx%*w==0) return false; return true; } void odczyt(LL&a,LL&b,int n) { a=0; b=0; int i=0; for(;i<=n;i++) { a*=10; a+=*(d+i); } if(*(d+i)==0) return; //zera wiodace for(;i<ddl;i++) { b*=10; b+=*(d+i); } } |