Advertisement
Guest User

Untitled

a guest
Jan 21st, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.68 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define L(i, m, n) for(int i(m);i < n;i++)
  3. #define _(n) L(i,0,n)
  4. #define __(n) L(i,1,n)
  5. #define pb push_back
  6. #define D(X) cout<<"  "<<#X": "<<X<<endl;
  7. #define in(x) cin >> x
  8. #define SZ(a) (int)a.size()
  9. #define clr(A, V) L(i, 0, sizeof(A)) A[i]=V
  10. #define ff first
  11. #define ss second
  12. #define RF(X) freopen(X, "r", stdin)
  13. #define WF(X) freopen(X, "w", stdout)
  14. using namespace std;
  15. typedef long long ll;
  16. typedef pair<ll,ll> pll;
  17. typedef vector<int> vi;
  18. typedef pair<int,int> pii;
  19. typedef vector<pii> vpii;
  20. typedef pair<int, string> pis;
  21. typedef vector<string> vs;
  22. typedef pair<pair<int, int>, pair<int, int > > piiii;
  23. typedef map<int,int> mpii;
  24. const int maxn=50000;
  25. bitset <maxn> bs; /** when use SegementSieve() maxn = sqrt N**/
  26. int P[maxn],N,M,f=1;
  27. vi PR;
  28. void sieve(int n){
  29.    bs[0]=bs[1]=1,P[1]=1;
  30.    for(int i = 2;i*i<=n;i++) if(!bs[i])for(int j = i*i;j <= n;j+=i) bs[j]=1,P[j]=i,PR.pb(i);
  31.    for(int i = 2;i <= n;i++) if(!bs[i])P[i]=i,PR.pb(i);
  32. }
  33. mpii F(int N){
  34.     mpii M;
  35.     _(SZ(PR))while(!(N%PR[i])&&N>=PR[i])M[PR[i]]++,N/=PR[i];if(N!=1)M[N]++;
  36.     return M;
  37. }
  38. int main(){
  39.     sieve(maxn);
  40.     while(scanf("%d%d",&N,&M)==2){
  41.         if(!M||M==1){
  42.             printf("%d divides %d!\n",M,N);
  43.             continue;
  44.         }
  45.         mpii MP=F(M);f=1;
  46.         for(mpii::iterator it=MP.begin();it!=MP.end()&&f;it++){
  47.             int F=it->ff;/**F prime,S Cardinality**/
  48.             for(int k=1;F*k<=N&&(it->ss)>0;k++){
  49.                 int X=F*k;
  50.                 while(!(X%F)&&it->ss)(it->ss)--,X/=F;
  51.             }
  52.             if(it->ss)f=0;
  53.         }
  54.         !f?printf("%d does not divide %d!\n",M,N):printf("%d divides %d!\n",M,N);
  55.     }
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement