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;
- long long lst[100000];
- long long lstsize;
- long long lstsize1;
- long long lst1[100000];
- 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;
- long long sqrtN=sqrt(n)+1;
- for(i=0;prime[i]<sqrtN;i++)
- {
- if(n%prime[i]==0)
- {
- while(n%prime[i]==0)
- {
- n/=prime[i];
- lst[lstsize++]=prime[i];
- }
- }
- }
- if(n>1){
- lst[lstsize++]=n;
- }
- }
- void primefac1(long long m)
- {
- long long i,j;
- long long sqrtN=sqrt(m)+1;
- for(i=0;prime[i]<=sqrtN;i++)
- {
- if(m%prime[i]==0)
- {
- while(m%prime[i]==0)
- {
- m/=prime[i];
- lst1[lstsize1++]=prime[i];
- }
- }
- }
- if(m>1){
- lst1[lstsize1++]=m;
- }
- }
- 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>0;i--)
- {
- primefac(i);
- }
- primefac1(m);
- long long count=0;
- long long k=0;
- sort(lst1,lst1+lstsize1);
- sort(lst,lst+lstsize);
- for(i=0;i<lstsize1;i++)
- {
- for(int j=k;j<lstsize;j++)
- {
- if(lst1[i]==lst[j])
- {
- count++;
- k=j+1;
- break;
- }
- }
- }
- if(count==lstsize1)
- {
- printf("%lld divides %lld!\n",m,n);
- }
- else
- printf("%lld does not divide %lld!\n",m,n);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment