C_求质数
质数:质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为质数。
题设:输入一个大于1的自然数,求出从2到该数之间所有的质数。
1. 按照素数的定义来求取,用两个for循环。
- #include <stdio.h>
- int prime(int i){
- int j;
- for(j=;j<i;j++){
- if(i%j==){
- return ;
- }
- }
- return ;
- }
- int main(void){
- int n,i;
- printf("请输入一个整数: ");
- scanf("%d",&n);
- for(i = ; i <= n; i++){
- if(prime(i)){
- printf("%d ",i);
- }
- }
- printf("\n");
- }
2. 对 1 进行优化,先排除可以被2整除的数(一定不是质数),sqrt()减少循环的区间。
- #include <stdio.h>
- #include <math.h>
- int prime(int i){
- int j,temp;
- temp=sqrt(i)+;//sqrt()
- for(j=;j<temp;j++){
- if(i%j==){
- return ;
- }
- }
- return ;
- }
- int main(void){
- int n,i;
- printf("请输入一个整数: ");
- scanf("%d",&n);
- for(i = ; i <= n; i++){
- if(i % != ){ //除去2的倍数。
- if (prime(i)) {
- printf("%d ",i);
- }
- }
- }
- printf("\n");
- }
3. 筛选法
- #include "stdio.h"
- #include "math.h"
- int main(void){
- int i,j,n,t,a[];
- t = ;
- for(i = ; i < ; i++){
- a[i] = ;
- }
- printf("请输入一个大于1的整数: ");
- scanf("%d",&n);
- for(i = ; i <= n; i++){
- if(a[i] == ){
- for(j = i*; j <= n; j = j+i){
- a[j] = ;
- }
- printf("%d ",i);
- t++;
- }
- }
- printf("\n");
- printf("%d",t);
- }
3-1 筛选法优化
- #include <stdio.h>
- #include <math.h>
- int main(){
- int arr[], i, j, n;
- arr[] = ;
- for(i=; i<; i++){
- if(i % ==){
- arr[i] = ;
- }else{
- arr[i] = ;
- }
- }
- printf("请输入一个整数: ");
- scanf( "%d", &n);
- for(i=; i<=n; i++){
- if (arr[i] == ){
- for(j=i*i; j<=n; j=j+i*){
- arr[j] = ;
- }
- printf("%d ",i);
- }
- }
- }
C_求质数的更多相关文章
- 求质数算法的N种境界[1] - 试除法和初级筛法
★引子 前天,俺在<俺的招聘经验[4]:通过笔试答题能看出啥?>一文,以"求质数"作为例子,介绍了一些考察应聘者的经验.由于本文没有政治敏感内容,顺便就转贴到俺在CSD ...
- [经典算法] Eratosthenes筛选求质数
题目说明: 除了自身之外,无法被其它整数整除的数称之为质数,要求质数很简单,但如何快速的求出质数则一直是程式设计人员与数学家努力的课题,在这边介绍一个著名的 Eratosthenes求质数方法. 题目 ...
- C语言1-100连加,求质数,算瑞年检测字母大小写,登录系统
#include <stdio.h> void test(){//1+2+3+4+.....+100 int a,b; a=0; b=0; for ( ; a<=100; a++) ...
- 【转】求质数算法的N种境界
原文地址:http://blog.csdn.net/program_think/article/details/7032600/ ★引子 前天,俺在<俺的招聘经验[4]:通过笔试答题能看出啥?& ...
- (转)求质数算法的N种境界[1] - 试除法和初级筛法
★引子 前天,俺在<俺的招聘经验[4]:通过笔试答题能看出啥?>一文,以"求质数"作为例子,介绍了一些考察应聘者的经验.由于本文没有政治敏感内容,顺便就转贴到俺在CSD ...
- C语言程序设计100例之(11):求质数
例11 求质数 问题描述 质数是指除了有1和自身作为约数外,不再有其他约数的数.比如:3.5.7是质数.而9不是质数,因为它还有约数3. 编写程序求给定区间中的所有质数. 输入格式 两个整数a和b, ...
- C语言程序设计100例之(12):Eratosthenes筛法求质数
例12 Eratosthenes筛法求质数 问题描述 Eratosthenes筛法的基本思想是:把某范围内的自然数从小到大依次排列好.宣布1不是质数,把它去掉:然后从余下的数中取出最小的数,宣布它 ...
- 小白的C++之路——求质数
初学C++,打算用博客记录学习的足迹.写了两个求质数的程序,修修改改. #include <iostream> #include <math.h> using namespac ...
- Java实现欧拉筛与花里胡哨求质数高级大法的对比
我也不清楚这是什么高级算法,欧拉筛是昨天有位大佬,半夜无意间告诉我的 欧拉筛: 主要的含义就是我把这个数的所有倍数都弄出来,然后下次循环的时候直接就可以跳过了 import java.text.Sim ...
随机推荐
- 使用jquery.more.js上滑加载更多
html: <div id="more"> <div class="single_item"> <div class=" ...
- springboot1.5.4 集成cxf完整实例
WebService 服务端 添加依赖 <?xml version="1.0" encoding="UTF-8"?> <project xml ...
- Java第三阶段学习(七、线程池、多线程)
一.线程池 1.概念: 线程池,其实就是一个容纳多个线程的容器,其中的线程可以重复使用,省去了频繁创建线程对象的过程,无需反复创建线程而消耗过多资源,是JDK1.5以后出现的. 2.使用线程池的方式- ...
- Nginx Java 日志切割脚本
Nginx日志切割脚本: #!/bin/bash ########################################################################### ...
- 【C#】WebApi 添加过滤器,实现对请求参数和响应内容的日志记录
filter的介绍 filter在Web API中经常会用到,主要用于记录日志,安全验证,全局错误处理等:Web API提供两种过滤器的基本类型:actionfilterattribute,excep ...
- 【Arduino】开源开发板说明
来自世界各地的新型微控制器层出不穷,这类开发板多数都是通过Arduino改进的版本,例如由Arduino所改良的Yún一样,主要是针对网状网路进行改进或升级了其它无线功能. 但一些开发板也有着其独到的 ...
- net core体系-web应用程序-4asp.net core2.0 项目实战(1)-6项目缓冲方案
Asp.Net Core2.0下使用memcached缓存. Memcached目前微软暂未支持,暂只支持Redis,由于项目历史原因,先用博客园开源项目EnyimMemcachedCore,后续用到 ...
- linq 将datatable分组求和在转datatable
DataTable dt = new DataTable(); dt.Columns.Add("CustomerID"); dt.Columns.Add("aa" ...
- L3-002 特殊堆栈 (30 分) 模拟stl
堆栈是一种经典的后进先出的线性结构,相关的操作主要有“入栈”(在堆栈顶插入一个元素)和“出栈”(将栈顶元素返回并从堆栈中删除).本题要求你实现另一个附加的操作:“取中值”——即返回所有堆栈中元素键值的 ...
- Codeforces 920F - SUM and REPLACE 【线段树】
<题目链接> 题目大意: 给你一个序列,有两个操作,一个是求区间 l - r 的和,另一个是对区间l-r的元素修改值,x=d(x),d(x)为x的因子个数. 解题分析: 因为可能有多次修改 ...