2 条题解

  • 0
    @ 2025-3-29 13:42:38

    本题直接暴力貌似要跑好长时间,可能是我暴力写错了,这道题可以先使用欧拉筛将质数都先筛出来,之后枚举q来二分查找p,那这道题就出来了

    #include<cstdio>
    #include<iostream>
    #include<vector>
    #include<map>
    #include<cstring>
    #include<array>
    #include<queue>
    #include<algorithm>
    #include<set>
    #include<cmath>
    using namespace std;
    using i64=long long;
    //using i128=__int128;
    const i64 INF=1e18;
    const int mod=998244353;
    //const int N=1e9+7;
    const int N=300;
    int primes[N],cnt=0;
    bool vis[N];
    void init(){
        for(int i=2;i<=N;i++){
            if(!vis[i])primes[++cnt]=i;
            for(int j=1;i*primes[j]<=N;j++){
                vis[i*primes[j]]=true;
                if(i%primes[j]==0)break;
            }
        }
    }
    void solve(){
        init();
        i64 ans=0;
        int k=20250309;
        for(int i=1;i<=cnt;i++){
            i64 q=primes[i];
            i64 q_sub=q*q*q;
            //找到符合题意p的最大值
            i64 max_p=k/q_sub;
            max_p=min(max_p,q-1);
            if(max_p<2)continue;
            //进行二分查找
            int pos=upper_bound(primes+1,primes+1+cnt,max_p)-primes;
            ans+=distance(primes+1,primes+pos);
        }
        cout<<ans<<'\n';
    }
    int main(){
        int _=1;
        //cin>>_;
        while(_--)solve();
        return 0;
    }
    
    • 0
      @ 2025-3-26 20:00:55

      暴力for 重要的是不等式两边开根号

      static int count = 0;
      	public static boolean check(int num) {
      		for (int i = 2; i < num; i++) {
      			if(num%i==0) {
      				return false;
      			}
      		}
      		return true;
      	}
      	public static void main(String[] args) {
      		int k = 0;
      		for (int i = 2; i < 20250309; i++) {
      			for (int j = 2; j < 20250309; j++) {
      				if(j*Math.sqrt((double)(i*j))>Math.sqrt((double)20250309)) {
      					break;
      				}
      				if(j<i) {
      					continue;
      				}
      				if(check(i)&&check(j)&&i<j&&i*j*j*j<20250309) {
      					count++;
      				}
      			}
      		}
      		System.out.println(count);
      	}
      }
      
      • 1

      信息

      ID
      301
      时间
      1000ms
      内存
      256MiB
      难度
      6
      标签
      递交数
      131
      已通过
      41
      上传者