-----------查询数据库素数的N种方法(包括C#的)--------------
来源:互联网 发布:北京青年政治学院 知乎 编辑:程序博客网 时间:2024/06/11 09:06
最近在看C#方面的书,正好看到迭代器这块,里面有个查询素数的示例我觉得还不错,于是就想到SQL也来实现一把。
其实有很多种方法,我大概列下下面。结果就只贴一个好了:
方法1: 最简单粗暴的算法
DECLARE @i INT , @j INT , @r INTSET @i = 2WHILE @i < 100 BEGIN SET @j = 1 SET @r = 1 WHILE @j < @i BEGIN IF @i % @j = 0 AND @i <> @j AND @j <> 1 BEGIN SET @r = 0 BREAK END SET @j = @j + 1 END IF @r = 1 PRINT @i SET @i = @i + 1 END
方法二:来自叶子,用平方根计算,比方法1提升了一点效率
--定义一个表变量,用来存储找到的素数DECLARE @t TABLE ( id INT )DECLARE @i INT SET @i = 2WHILE ( @i <= 100 ) BEGIN DECLARE @j INT SET @j = SQRT(@i) WHILE ( @j >= 2 ) BEGIN IF ( @i % @j = 0 ) BREAK SET @j = @j - 1 END IF ( @j = 1 ) INSERT INTO @t SELECT @i SET @i = @i + 1 END
方法三:
借助系统表 还是用平方根
DECLARE @i INTSET @i = 100 SELECT A.numberFROM master..spt_values AS AWHERE type = 'p' AND number BETWEEN 2 AND @i AND NOT EXISTS ( SELECT 1 FROM master..spt_values AS B WHERE B.type = 'p' AND B.number BETWEEN 2 AND SQRT(A.number) AND A.number % B.number = 0 )ORDER BY A.number
最后附上C#解决办法:用控制台程序解决
using System;using System.Collections;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Ch11Ex03{ class Program { public class Primes { private long min; private long max; public Primes(): this(2, 100) { } public Primes(long minimum, long maximum) { if (min < 2) min = 2; else min = minimum; max = maximum; } public IEnumerator GetEnumerator() { for (long possiblePrime = min; possiblePrime <= max; possiblePrime++) { bool isPrime = true; for (long possibleFactor = 2; possibleFactor <= (long)Math.Floor(Math.Sqrt(possiblePrime)); possibleFactor++) { long remainderAfterDivision = possiblePrime % possibleFactor; if (remainderAfterDivision == 0) { isPrime = false; break; } } if (isPrime) { yield return possiblePrime; } } } } static void Main(string[] args) { Primes primesFrom2To100 = new Primes(2, 100); foreach (long i in primesFrom2To100) Console.Write("{0}\n", i); Console.ReadKey(); } }}
0 0
- -----------查询数据库素数的N种方法(包括C#的)--------------
- 从数据库某个表查询随机查询10条(或N条)数据的方法
- linux下杀死进程(kill)的N种方法 包括python--killproc
- linux下杀死进程(kill)的N种方法 包括python–killproc
- linux下杀死进程(kill)的N种方法 包括python–killproc
- C# 获取路径的N种方法
- 小于n的素数
- C#中从数据库查询记录的方法分类( 一般使用两种方法):
- 原创:Oracle数据库中查询数据表中的前N名、后N名、中间N名记录的方法
- Oracle数据库中查询数据表中的前N名、后N名、中间N名记录的方法
- 素数筛选法 (求1~n的素数)
- 素数求解的n种境界
- 输出n范围内的素数(质数)
- C#执行查询的几种方法
- 生成和测试N位大素数的方法
- Oracle查询重复数据的N种方法
- 数据库查询的几种方法
- 数据库查询优化的两种方法
- 拷贝构造函数和赋值运算符 区别
- Presenting view controllers on detached view controllers is discouraged
- 传输翻译的文本对象
- Java mail接收邮件 回复邮件 转发邮件
- qtp 导入excel文件
- -----------查询数据库素数的N种方法(包括C#的)--------------
- IDES启动出错, Start failed: 2, Invalid Credentials
- 2014年.net程序员年终总结
- 第一篇
- Leetcode - Longest Substring Without Repeating Characters
- 剑指offer 面试题38 排序数组中数字出现的次数
- SSH学习4:maven spring annotion
- Swift开发笔记1.《Swift开发指南》计算器实战项目的相关心得
- 【iOS开源代码】(5):MKNetworkKit