Dreaming of Freedom(数论,贪心)

用nsqrt(n)的时间复杂度就能过

//Dreaming of Freedom:https://codeforces.com/problemset/problem/1826/C

#include <bits/stdc++.h>
//#define int long long
using namespace std;
const int N=1e5+10,mod=1e9+7;
string s;
int n,t,a[N],f[N],res,num,ans,m;
bool vis[N];
int main()
{
    std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    cin>>t;
    while(t--){
        cin>>n>>m;
        if(n>=2&&m>=n){
            cout<<"NO"<<endl;
            continue;
        }
        if(!(n%2)&&m>=2){
            cout<<"NO"<<endl;
            continue;
        }
        if(n>m){
            bool f=false;
            for(int i=2;i<=n/i&&i<=m;++i){
                if(n%i==0){
                    f=true;
                    break;
                }
            }
            if(f){
                cout <<"NO"<<endl;
                continue;
            }
        }
        cout<<"YES"<<endl;
        
    }
    return 0;
}

 

#include <bits/stdc++.h>
//#define int long long
using namespace std;
const int N=1e6+10,mod=1e9+7;
string s;
int n,t,p[N],prime[N],res,num,ans,m;
bool vis[N];
int main()
{
    std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    cin>>t;
    vis[1]=true,prime[1]=1;
    for(int i=2;i<=1000000;i++){
        if(!vis[i]) p[++num]=prime[i]=i;
        for(int j=1;p[j]<=1000000/i;j++){
            vis[p[j]*i]=true,prime[i*p[j]]=p[j];
            if(!(i%p[j])) break;
        }
    }
    while(t--){
        cin>>n>>m;
        if(prime[n]==1||prime[n]>m) cout<<"YES"<<endl;
        else if(prime[n]<=m)cout<<"NO"<<endl;
    }
    return 0;
}

 

posted @ 2023-06-23 10:25  o-Sakurajimamai-o  阅读(48)  评论(0)    收藏  举报
-- --