1 条题解

  • 1
    @ 2022-10-18 9:16:27

    阳寿做法(不会有人复制这个来尝试AC吧)

    #include <cstdio>
    #include <stdlib.h>
    #include <time.h>
    
    inline int reader(){
    	int it = 0 , chr = getchar()  ;
    	while('0' > chr || chr > '9')
    		chr = getchar();
    	while('0' <= chr && chr <= '9')
    		it = (it << 1) + (it << 3) + chr - '0' ,chr = getchar() ;
    	return it;
    } 
    
    int n , q ;
    
    int main(){
    	n = reader() ;
        q = reader() ;
        srand(time(NULL));
    	//随机数,听天由命
        while(q --)
        	printf("%d\n",rand()%2);
    	return 0 ;
    }//一个样例都没过
    
    #1	 Wrong Answer 读取到 0,应为 0。	64ms	288 KiB
    #2	 Wrong Answer 读取到 1,应为 0。	52ms	320 KiB
    #3	 Wrong Answer 读取到 1,应为 0。	18ms	304 KiB
    #4	 Wrong Answer 读取到 1,应为 0。	53ms	412 KiB
    #5	 Wrong Answer 读取到 1,应为 0。	2ms 	272 KiB
    #6	 Wrong Answer 读取到 1,应为 0。	12ms	224 KiB
    #7	 Wrong Answer 读取到 1,应为 0。	5ms 	376 KiB
    #8	 Wrong Answer 读取到 1,应为 0。	68ms	376 KiB
    #9	 Wrong Answer 读取到 1,应为 0。	29ms	248 KiB
    #10	 Wrong Answer 读取到 1,应为 0。	28ms	276 KiB
    

    基础做法

    #include <cstdio>
    
    inline int reader(){//什么老六题目,卡我时间
    	int it = 0 , chr = getchar()  ;
    	while('0' > chr || chr > '9')
    		chr = getchar();
    	while('0' <= chr && chr <= '9')
    		it = (it << 1) + (it << 3) + chr - '0' ,chr = getchar() ;
    	return it;
    } 
    
    int n , q , pi , primes[5761455];
    bool unprime[100000001] ;
    
    int main(){
    	unprime[0] = unprime[1] = 1;
    	n = reader() ;
        //线性筛
        for(int i = 2 ; i <= n ; i ++){
    		//遍历
            if(!unprime[i])
    			//没筛到是质数
    			primes[pi++] = i;	
    	    for(int j = 0 ; j <= pi && i * primes[j] <= n; j ++){
    	        unprime[i*primes[j]] = 1;
    			//筛去合数
    	        if(i % primes[j] == 0) break;
    			//保证每个数只被筛了一遍
    	    }
        }
    	//讲的比较简单,可以百度自搜
        q = reader() ;
        while(q --)//输出
        	printf("%d\n" , !unprime[reader()]) ;
    	return 0 ;       
    }
    

    但是;

    #4	 Accepted	962ms	104.5 MiB
    #8	 Accepted	991ms	87.8 MiB
    

    很显然,离去世就差几毫秒 所以

    #pragma GCC optimize(1)
    #pragma GCC optimize(2)
    #pragma GCC optimize(3)
    #include <cstdio>
    //pragma优化貌似OI不能用,所以考试时老老实实想别的路
    
    inline int reader(){
    	int it = 0 , chr = getchar()  ;
    	while('0' > chr || chr > '9')
    		chr = getchar();
    	while('0' <= chr && chr <= '9')
    		it = (it << 1) + (it << 3) + chr - '0' ,chr = getchar() ;
    	return it;
    } 
    
    int n , q , pi , k , primes[5761455] ;
    bool unprime[100000001] ;
    
    int main(){
    	unprime[0] = unprime[1] = 1;
    	n = reader() ;
        for(int i = 3 ; i <= n ; i += 2){
    		//直接对2倍数特判
    		//省了一半时间
    		if(!unprime[i])
    			primes[pi++] = i;
    		for(int j = 0 ; j < pi && (i * primes[j]) <= n; j ++){
    			unprime[i*primes[j]] = 1;
    			if(i % primes[j] == 0) break;
    		}
        }
        q = reader() ;
        while(q --){
        	k = reader() ;
    		//特判 奇数或2
        	if(k & 1 || k == 2)
        		putchar((!unprime[k]) + '0');
        	else
        		putchar('0') ;
        	putchar('\n') ;
    	}
    	return 0 ;
    }
    

    结果

    #1	 Accepted	317ms	69.2 MiB
    #2	 Accepted	188ms	31.6 MiB
    #3	 Accepted	329ms	100.5 MiB
    #4	 Accepted	397ms	105.4 MiB
    #5	 Accepted	218ms	71.4 MiB
    #6	 Accepted	48ms	12 MiB
    #7	 Accepted	365ms	91.1 MiB
    #8	 Accepted	423ms	89 MiB
    #9	 Accepted	312ms	93.6 MiB
    #10	 Accepted	184ms	58.5 MiB
    分数100  总耗时2780ms  峰值内存105.4 MiB
    
    • 1

    信息

    ID
    1512
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    87
    已通过
    17
    上传者