Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<bits/stdc++.h>
- #include<algorithm>
- using namespace std;
- #define M 1000000
- bool mark[M];
- vector<long long>prime;
- vector<long long>lst;
- long long lstsize;
- long long lstsize1;
- vector<long long>lst1;
- void sieve()
- {
- long long i,j;
- prime.push_back(2);
- for(i=3;i*i<=M;i+=2)
- {
- if(mark[i]==false)
- {
- for(j=i*i;j<=M;j+=2*i)
- mark[j]=true;
- }
- }
- for(i=3;i<=M;i+=2)
- {
- if(mark[i]==false)
- prime.push_back(i);
- }
- }
- void primefac(long long n)
- {
- long long i,j;
- for(i=0;prime[i]*prime[i]<=n;i++)
- {
- if(n%prime[i]==0)
- {
- while(n%prime[i]==0)
- {
- n/=prime[i];
- lst.push_back(prime[i]);
- lstsize++;
- }
- }
- }
- if(n>1){
- lst.push_back(n);
- lstsize++;
- }
- }
- void primefac1(long long m)
- {
- long long i,j;
- for(i=0;prime[i]*prime[i]<=m;i++)
- {
- if(m%prime[i]==0)
- {
- while(m%prime[i]==0)
- {
- m/=prime[i];
- lst1.push_back(prime[i]);
- lstsize1++;
- }
- }
- }
- if(m>1){
- lst1.push_back(m);
- lstsize1++;
- }
- }
- bool issubset()
- {
- long long i=0,j=0;
- while(i<lstsize1 && j<lstsize)
- {
- if(lst[j]<lst1[i])
- {
- j++;
- }
- else if(lst[j]==lst1[i])
- {
- j++;
- i++;
- }
- else if(lst[j]>lst1[i])
- {
- return 0;
- }
- }
- return (i<lstsize1)?false:true;
- }
- int main()
- {
- sieve();
- long long n,i,fac=0,m;
- while(scanf("%lld %lld",&n,&m)==2)
- {
- if(n>=m)
- {
- printf("%lld divides %lld!\n",m,n);
- }
- else{
- lstsize=0;
- lstsize1=0;
- for(i=n;i>1;i--)
- {
- primefac(i);
- }
- primefac1(m);
- long long count=0;
- long long k=0;
- i=0;
- long long j=0;
- sort(lst1.begin(),lst1.end());
- sort(lst.begin(),lst.end());
- bool ans;
- ans=issubset();
- if(ans==true)
- {
- printf("%lld divides %lld!\n",m,n);
- }
- else
- printf("%lld does not divide %lld!\n",m,n);
- }
- lst.clear();
- lst1.clear();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment