今天做题学会了一个求素数的方法

总分 13
  1. 孪生素数
  2. 相差为2的两个素数称为孪生素数。例如,354143等都是孪生素数。设计程序求出指定区间上的所有孪生素数对。区间上限和下限由键盘获取。
  3. 程序运行示例如下:
  4. please input c,d(c>2):
  5. 10,200
  6. (11,13)
  7. (17,19)
  8. (29,31)
  9. (41,43)
  10. (59,61)
  11. (71,73)
  12. (101,103)
  13. (107,109)
  14. (137,139)
  15. (149,151)
  16. (179,181)
  17. (191,193)
  18. (197,199)
  19. total=13
  20.  
  21. 输入格式:
  22. 区间上限和下限的输入格式: "%ld,%ld"
  23.  
  24. 输出格式:
  25. 区间上限和下限的输入提示信息:"please input c,d(c>2):\n"
  26. 孪生素数的输出格式:"(%ld,%ld)\n"
  27. 所有孪生素数对的总数输出格式: "total=%d\n"
  1. #include<stdio.h>
  2. #define q 1000011
  3. int a[q];
  4. int main()
  5. {
  6. printf("please input c,d(c>2):\n");
  7. int i;
  8. int j;
  9. a[]=a[]=;
  10. for(i=;i<q;i++)
  11. {
  12. if(!a[i])
  13. {
  14. for(j=*i;j<q;j+=i)
  15. a[j]=;
  16. }
  17. }
  18. int m,n;
  19. scanf("%d,%d",&n,&m);
  20. int x=n;
  21. int y=m;
  22.  
  23. int z;
  24. z=;
  25. if(m<=)
  26. printf("0\n");
  27. else
  28. {for(i=x+;i<=y;i++)
  29. {
  30. if(!a[i]&&!a[i-])//判断距离是否为2;
  31. {printf("(%ld,%ld)\n",i-,i);
  32. z++;
  33. }
  34.  
  35. }
  36. printf("total=%d\n",z);
  37.  
  38. }
  39.  
  40. }

从这个博客学到了一个求素数的方法

  1. #define q 1000011
  2. int a[q];
  3. a[]=a[]=;
  4. for(i=;i<q;i++)
  5. {
  6. if(!a[i])
  7. {
  8. for(j=*i;j<q;j+=i)
  9. a[j]=;
  10. }
  11. }

从2开始把每个数的倍数下标的数组设置成值为1

这样一轮循环下来值为0的数组元素,下标值就是素数.

Get到了这个神奇的点,敲起来很快

我原来的做法是这种

(转载的他人的代码)

  1. public static boolean isPrime(int n){
  2. if (n <= ) {
  3. return n > ;
  4. }
  5. for(int i = ; i < n; i++){
  6. if (n % i == ) {
  7. return false;
  8. }
  9. }
  10. return true;
  1. public static boolean isPrime(int n) {
  2. if (n <= ) {
  3. return n > ;
  4. }
  5. int sqrt = (int)Math.sqrt(n);
  6. for (int i = ; i <= sqrt; i++) {
  7. if(n % i == ) {
  8. return false;
  9. }
  10. }
  11. return true;
  1. public static boolean isPrime(int num) {
  2. if (num <= 3) {
  3. return num > 1;
  4. }
  5. // 不在6的倍数两侧的一定不是质数
  6. if (num % 6 != 1 && num % 6 != 5) {
  7. return false;
  8. }
  9. int sqrt = (int) Math.sqrt(num);
  10. for (int i = 5; i <= sqrt; i += 6) {
  11. if (num % i == 0 || num % (i + 2) == 0) {
  12. return false;
  13. }
  14. }
  15. return true;
  16. }

C语言判断素数(求素数)(两种方法)

素数又称质数。所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除。

思路1):因此判断一个整数m是否是素数,只需把 m 被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么 m 就是一个素数。

思路2):另外判断方法还可以简化。m 不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~  之间的每一个整数去除就可以了。如果 m 不能被 2 ~  间任一整数整除,m 必定是素数。例如判别 17 是是否为素数,只需使 17 被 2~4 之间的每一个整数去除,由于都不能整除,可以判定 17 是素数。

原因:因为如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于 ,另一个大于或等于 。例如 16 能被 2、4、8 整除,16=2*8,2 小于 4,8 大于 4,16=4*4,4=√16,因此只需判定在 2~4 之间有无因子即可。

#018 C语言刷题 素数问题的更多相关文章

  1. HDU 自动刷题机 Auto AC (轻轻松松进入HDU首页)

    前言: 在写这篇文章之前,首先感谢给我思路以及帮助过我的学长们 以下4篇博客都是学长原创,其中有很多有用的,值得学习的东西,希望能够帮到大家! 1.手把手教你用C++ 写ACM自动刷题神器(冲入HDU ...

  2. 手把手教你用C++ 写ACM自动刷题神器(冲入HDU首页)

    转载注明原地址:http://blog.csdn.net/nk_test/article/details/49497017 少年,作为苦练ACM,通宵刷题的你 是不是想着有一天能够荣登各大OJ榜首,俯 ...

  3. 教你用python写:HDU刷题神器

    声明:本文以学习为目的,请不要影响他人正常判题 HDU刷题神器,早已被前辈们做出来了,不过没有见过用python写的.大一的时候见识了学长写这个,当时还是一脸懵逼,只知道这玩意儿好屌-.时隔一年,决定 ...

  4. JS、JAVA刷题和C刷题的一个很重要的区别

    就是最近在做树方面的题时,发现JS和JAVA刷题和C刷题的一个很重要的区别就是传入null的区别 当遍历的时候,C传参数时可以传进去null的指针,因为递归进去,出来时,指针还是指着那个地方 但是JS ...

  5. leecode刷题(17)-- 实现StrStr

    leecode刷题(17)-- 实现StrStr 实现StrStr 描述: 实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串 ...

  6. LeetCode 刷题指南(1):为什么要刷题

    虽然刷题一直饱受诟病,不过不可否认刷题确实能锻炼我们的编程能力,相信每个认真刷题的人都会有体会.现在提供在线编程评测的平台有很多,比较有名的有 hihocoder,LintCode,以及这里我们关注的 ...

  7. 牛客网刷题(纯java题型 1~30题)

    牛客网刷题(纯java题型 1~30题) 应该是先extend,然后implement class test extends A implements B { public static void m ...

  8. 牛客网Java刷题知识点之Map的两种取值方式keySet和entrySet、HashMap 、Hashtable、TreeMap、LinkedHashMap、ConcurrentHashMap 、WeakHashMap

    不多说,直接上干货! 这篇我是从整体出发去写的. 牛客网Java刷题知识点之Java 集合框架的构成.集合框架中的迭代器Iterator.集合框架中的集合接口Collection(List和Set). ...

  9. 牛客网Java刷题知识点之HashMap的实现原理、HashMap的存储结构、HashMap在JDK1.6、JDK1.7、JDK1.8之间的差异以及带来的性能影响

    不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑          ...

随机推荐

  1. 1.Django安装与运行

    Django基本配置 Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Se ...

  2. 【转】msfvenom使用指南

    msfvenom命令行选项如下: Options: -p, --payload <payload> 指定需要使用的payload(攻击荷载).如果需要使用自定义的payload,请使用'- ...

  3. knockoutjs 上自己实现的flux

    在knockoutjs 上实现 Flux 单向数据流 状态机,主要解决多个组件之间对数据的耦合问题. 一.其实简单 flux的设计理念和实现方案,很大程度上人借鉴和参考了Vuex的实现,只是简化了某些 ...

  4. 如何写好css系列之button

    现代前端行业的发展,如果你在css的时候,还没有利用一些预编译工具,是否觉得自己太low了.但你是否考虑过搭建一套自己前端框架.可能你会想这是否有必要,因为基础有boostrap,组件库有:easyu ...

  5. python:数据库连接操作入门

    模块 import pymssql,pyodbc 模块说明 pymssql和pyodbc模块都是常用的用于SQL Server.MySQL等数据库的连接及操作的模块,当然一些其他的模块也可以进行相应的 ...

  6. 精读《React PowerPlug 源码》

    1. 引言 React PowerPlug 是利用 render props 进行更好状态管理的工具库. React 项目中,一般一个文件就是一个类,状态最细粒度就是文件的粒度.然而文件粒度并非状态管 ...

  7. 【ASP.NET Core快速入门】(十四)MVC开发:UI、 EF + Identity实现、注册实现、登陆实现

    前言 之前我们进行了MVC的web页面的Cookie-based认证实现,接下来的开发我们要基于之前的MvcCookieAuthSample项目做修改. MvcCookieAuthSample项目地址 ...

  8. 【ASP.NET Core快速入门】(四)在CentOS上安装.NET Core运行时、部署到CentOS

    下载.NET Core SDK 下载地址:https://www.microsoft.com/net/download/windows 第一步:Add the dotnet product feed( ...

  9. leetcode — best-time-to-buy-and-sell-stock-ii

    /** * Source : https://oj.leetcode.com/problems/best-time-to-buy-and-sell-stock-ii/ * * * * Say you ...

  10. 在.NET Core中使用简单的插件化机制

    前言 插件化,其实也并不是什么新东西了,像nopCommerce等开源项目都有类似的机制,而且功能比较完善和齐全. 相信大家都对接过不少支付方式,支付宝.微信以及各大银行或第三方的支付公司. 我们可以 ...