Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define L(i, m, n) for(int i(m);i < n;i++)
- #define _(n) L(i,0,n)
- #define __(n) L(i,1,n)
- #define pb push_back
- #define D(X) cout<<" "<<#X": "<<X<<endl;
- #define in(x) cin >> x
- #define SZ(a) (int)a.size()
- #define clr(A, V) L(i, 0, sizeof(A)) A[i]=V
- #define ff first
- #define ss second
- #define RF(X) freopen(X, "r", stdin)
- #define WF(X) freopen(X, "w", stdout)
- using namespace std;
- typedef long long ll;
- typedef pair<ll,ll> pll;
- typedef vector<int> vi;
- typedef pair<int,int> pii;
- typedef vector<pii> vpii;
- typedef pair<int, string> pis;
- typedef vector<string> vs;
- typedef pair<pair<int, int>, pair<int, int > > piiii;
- typedef map<int,int> mpii;
- const int maxn=50000;
- bitset <maxn> bs; /** when use SegementSieve() maxn = sqrt N**/
- int P[maxn],N,M,f=1;
- vi PR;
- void sieve(int n){
- bs[0]=bs[1]=1,P[1]=1;
- 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);
- for(int i = 2;i <= n;i++) if(!bs[i])P[i]=i,PR.pb(i);
- }
- mpii F(int N){
- mpii M;
- _(SZ(PR))while(!(N%PR[i])&&N>=PR[i])M[PR[i]]++,N/=PR[i];if(N!=1)M[N]++;
- return M;
- }
- int main(){
- sieve(maxn);
- while(scanf("%d%d",&N,&M)==2){
- if(!M||M==1){
- printf("%d divides %d!\n",M,N);
- continue;
- }
- mpii MP=F(M);f=1;
- for(mpii::iterator it=MP.begin();it!=MP.end()&&f;it++){
- int F=it->ff;/**F prime,S Cardinality**/
- for(int k=1;F*k<=N&&(it->ss)>0;k++){
- int X=F*k;
- while(!(X%F)&&it->ss)(it->ss)--,X/=F;
- }
- if(it->ss)f=0;
- }
- !f?printf("%d does not divide %d!\n",M,N):printf("%d divides %d!\n",M,N);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement