• 埃式筛法筛素数(计祘客找质数)


    做法:做法其实很简单,首先将2到n范围内的整数写下来,其中2是最小的素数。将表中所有的2的倍数划去,表中剩下的最小的数字就是3,他不能被更小的数整除,所以3是素数。再将表中所有的3的倍数划去……以此类推,如果表中剩余的最小的数是m,那么m就是素数。然后将表中所有m的倍数划去,像这样反复操作,就能依次枚举n以内的素数,这样的时间复杂度是O(nloglogn)。

    例如 计祘客 找质数题目链接:https://nanti.jisuanke.com/t/A2238

    一天蒜头君猜想,是不是所有的偶数(除了 22),都可以用两个质数相加得到呢?于是聪明的蒜头君就找你来验证了。

    输入格式

    第一行输入一个整数 tt 表示测试组数。

    接下来 tt 行,每行一个整数 nn。

    输出格式

    输出两个整数,因为答案可能有多个,所有要求输出的这两个整数是所有答案中字典序最小的。

    数据范围

    对于 30\%30% 的数据 1 le t le 10^31t103。

    对于 60\%60% 的数据 1 le t le 10^51t105。

    对于 100\%100% 的数据 1 le t le 10^6, 4 le n le 10^61t106,4n106,nn 为偶数。

    样例输入

    3
    4
    8
    20

    样例输出

    2 2
    3 5
    3 17

    #include<bits/stdc++.h>
    using namespace std;
    const int N = 1e6+10;
    bool vis[N];
    int main()
    {
    	int i;
    	memset(vis,true,sizeof(vis));
    	for(i = 2; i <= N; i++){
    		if(vis[i]){
    			for(int j = i+i; j <= N; j += i){
    				vis[j] = false;
    			}
    		}
    	}
    	int n;
    	scanf("%d",&n);
    	while(n--){
    		int x;
    		scanf("%d",&x);
    		for(i = 2; i <= x/2; i++){
    			if(vis[i] == true && vis[x-i] == true){
    				printf("%d %d
    ",i,x-i);
    				break;
    			}
    		}
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    maven 父子模块保持相同
    Maven deploy时排除指定的某个module
    源码,反码,补码
    Java日志之Slf4j,Log4J,logback原理总结
    Git Bash设置代理
    分享2个分布式锁
    二叉树的遍历记忆方法
    MySQL百万级数据分页查询及优化
    eclipse无法访问sun.misc.Unsafe类的解决办法
    Spring学习日志之纯Java配置的MVC框架搭建
  • 原文地址:https://www.cnblogs.com/clb123/p/10567140.html
Copyright © 2020-2023  润新知