数据库素数
A. 用Visual FoxPro 怎么输出3到100之间所有的素数之和
稍微有点复杂,不过还行,要先建数据库SH.DBF 就一个字段 "素数"
程序如下:
clea
set talk off
sele 1
use sh
zap
n=0
j=3
do while j<=100
for i=2 to j-1
if j%i=0
n=n+1
endif
endfor
if n=0
appe blan
repl 素数 with j
endif
j=j+1
n=0
enddo
sum 素数 to a
?a
B. sql怎么判断查奇偶数
首先第一句话:虽然我不知到这两个数是什麽,但我知道你一定也不知道。 从这句话说明孙手里拿到的两个数肯定都不是素数(什么是素数?就是除了1和它本身以外不再有其他因数的自然数),不然的话,孙通过知道庞的和就可以唯一判断出这两个数字了
推理一:比如A=a+b,B=a*b;B=15,A=8,那么很容易就猜想到了a=3,b=5 (因为对15进行拆分只有一种可能),所以对庞的第一句话产生了矛盾;那么a,b两个数可能是一个奇数,一个偶数;另外有位大神认为任意大于4的偶数都能被拆成两个奇质数之和,但由于两个质数都要小于99,所以庞手上的数可能为偶数,但这个偶数会接近200(有182,184,188,190,192,196和198),除此之外,只可能是奇数;举例:如果庞涓手上是28,可以拆成11+17,当孙膑拿到了187这个积,马上就可以猜出鬼谷子给他的两个数是11和17,与庞涓肯定孙膑不知道这两个数相矛盾,因此有可能拆成两个2-99的质数和的数都要排除因此有可能拆成两个2-99的质数和的数都要排除
推理二:庞的和数一定不是大于55的数。因为大于53的数始终能够拆成质数53和另一个大于2的数,在2-99的限制下,这两个数的乘积只有这唯一一种拆分方法。举例:如果庞手上的和数是57,可以拆成53+4,当孙膑拿到212这个积,只有4*53这一种拆分可能性,因为2*106的另一种拆分方法导致有一个数超过99。由此排除55以上的所有所有数因此最后满足以上条件的这样的数字仅有11个:11,17,23,27,29,35,37,41,47,51,53。
第二句话:本来我不知道,现在知道了;这说明孙看了自己手上的积后,分解因式对应的所有拆分情况中有且仅有一种,两个因数的和是以上11个数中的一个。
第三句话:那我也知道了;由于庞涓并不知道两数积,所以只能从以上表格出发确定,最后得到两个数字分别是4和13
也许上面的解析并不通俗易懂,其中涉及到很多数学知识和推理能力,如果感兴趣可以基于上述讲解自行进行推导;其实这道题的本质是基于每次的问题进行排除,尽可能的缩小范围,最后得到结果;那么最后通过SQL的方式来解决这类问题,或许通过sql(基于HQL)的方式可以帮助读者更加清晰理解
C. vb判断素数
正确程序如下(可以通过比较寻找自己的错误):
Private Sub Command1_Click()
X = Text1.Text
For i = 2 To X - 1
If X Mod i = 0 Then
F = 1
Exit For
End If
Next i
If F = 1 Then
Label2.Caption = "你输入的数是" & X & ",该数不是素数。"
Else
Label2.Caption = "你输入的数是" & X & ",该数是素数。"
End If
End Sub
(3)数据库素数扩展阅读:
质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。
根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积;而且如果不考虑这些质数在乘积中的顺序,那么写出来的形式是唯一的。最小的质数是2。
目前为止,人们未找到一个公式可求出所有质数。
2016年1月,发现世界上迄今为止最大的质数,长达2233万位,如果用普通字号将它打印出来长度将超过65公里。
D. 数据库输出100到2000之间的素数
declare @i int,@j int,@r int
set @i=100
while @i<2000
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
E. oracle怎么求1..1000之间的素数
Oracle是数据库,存储数据用的,应用逻辑最好放在数据库外面,虽然可以实现,但是并不提倡。
set serverout on
DECLARE
v_iNUMBER;
v_jNUMBER;
v_cntNUMBER;
TYPEtype_arrayISTABLEOFNUMBER;
primestype_array;
flagNUMBER;
BEGIN
primes:=type_array();
primes.extend;
primes(1):=2;
primes.extend;
primes(2):=3;
v_i:=5;
v_cnt:=2;
LOOP
EXITWHENv_i>1000;
flag:=1;
v_j:=1;
LOOP
EXITWHENprimes(v_j)*primes(v_j)>v_i;
IFMOD(v_i,primes(v_j))=0THEN
flag:=0;
EXIT;
ENDIF;
v_j:=v_j+1;
ENDLOOP;
IFflag=1THEN
primes.extend;
v_cnt:=v_cnt+1;
primes(v_cnt):=v_i;
dbms_output.put_line(v_i);
ENDIF;
v_i:=v_i+2;
ENDLOOP;
END;
/
F. 用数据库编程实现:求2~100之间的所有素数
declare @I int=2,@J int,@K bit
while @I<100
begin
set @J=2
set @K=1
while @J<@I-1
begin
if @I%@J=0 set @K=0
set @J=@J+1
end
if @K=1 print @I
set @I=@I+1
end
G. 用C语言把2-100之内的素数放到数组里,并且输出来。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define n 100
int main()
{
int a[n+1]={0};
int i,j;
for(i=2;i<=sqrt(n);i++){
if(a[i]==0){
for(j=2*i;j<=n;j+=i){
a[j]=1;
}
}
}
for(i=2;i<=n;i++){
if(a[i]==0)
printf("%d ",i);
}
return 0;
}
输出100以内的素数,思路:
假如自然数N不是素数,则除1和其本身之外,必然至少存在两个数A和B,使得A*B=N,则A和B中必有一个大于或者等于sqrt(N),另一个小于或者等于sqrt(N)。下面是粗略证明如果N是合数,则必有一个小于或者等于根号N的素因子.因为任何合数都可表示为两个或者更多个素数之积。
假如N是合数且其素因子都大于根号N,那么将产生矛盾:根号N*根号N>N。所以合数必有(至少)一个不大于根号N的素因子。
n的不大于根号的因子<=sqrt(n);n-1的不大于根号的因子<=sqrt(n-1),显然sqrt(n-1)<sqrt(n);所以2~n内的自然数的因子范围是2~sqrt(n);换句话说2~sqrt(n)的倍数覆盖了了2~n范围内的合数。
(7)数据库素数扩展阅读:
数组使用规则:
1.可以只给部分元素赋初值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。例如:static int a[10]={0,1,2,3,4};表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。
2.只能给元素逐个赋值,不能给数组整体赋值。例如给十个元素全部赋1值,只能写为:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能写为:static int a[10]=1;请注意:在C、C#语言中是这样,但并非在所有涉及数组的地方都这样,数据库是从1开始。
3.如不给可初始化的数组赋初值,则全部元素均为0值。
4.如给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。例如:static int a[5]={1,2,3,4,5};可写为:static int a[]={1,2,3,4,5};动态赋值可以在程序执行过程中,对数组作动态赋值。这时可用循环语句配合scanf函数逐个对数组元素赋值。
网络-数组
H. java多个线程求1到100的素数,,并将素数存入到数据库中,怎么弄
将1到100分十个数组,开十个线程进行计算,开启线程可以用thread类,或runnable接口