用JavaScript,求1到100内所有的质数,(质数就是素数),不用函数方法,用循环和brea
用JavaScript,求1到100内所有的质数,(质数就是素数),不用函数方法,用循环和break与contineue语句。...
用JavaScript,求1到100内所有的质数,(质数就是素数),不用函数方法,用循环和break与contineue语句。
展开
展开全部
一:十万一下的 呵呵算法一:
测试 10 万以下的质数: 程序代码
// 获得 0 到 limit 之间的素数
// author: dron
function getPrimeNumbers(limit){
var result = [2];
var is;
if(limit < 2)
return [];
for(var i = 3, s; i <= limit; i += 2){
is = true;
s = Math.sqrt(i);
for(var j = 0, r, l = result.length; j <= l; j ++){
r = result[j];
if(r > s)
break;
if(i % r)
continue;
is = false;
break;
}
is && result.push(i);
}
return result;
}算法二: 程序代码
var stopwatch = new Date(); // 计时器, 初始化.
var MaxNum = 100000; // 查找 2到MaxNum 这范围内的素数 ( MaxNum 要>= 2 ).
var i, j; // 计数器.
var count = 1; // 初始化素数的个数, 因为我们从2开始计, 所以初始化为 1.
var PrimeTemp = []; // 在这个数组做记号, 做了记号的, 全不是素数.
var PrimeArys = [2]; // 贮存素数的 数组. 因为 MaxNum >= 2, 所以第一个数组元素的值为 2 .
var oNum = Math.ceil( Math.sqrt( MaxNum ) ); // 为什么用 开方? 看到下面2个 for 没.
// 把不是素数的做 "记号".
for(i=3; i<oNum; i+=2) // +=2 ??? 我们整个程序都不用双数, 全用单数, 这样就快2倍了.
if( PrimeTemp[i]==null ) // 初始化 PrimeTemp 的数组, 数组里面当然什么都没有.
for(j=i; i*j<=MaxNum; j+=2) // i 的 j 倍一定不是素数, 但我们要 i*j 来看看是否超过了 MaxNum
PrimeTemp[ i*j ] = 0; // 初始化 PrimeTemp 里的元素, 现在来帮它们做一个 "记号". 因为这个元素"不是"素数.
// 输出素数了.
for(i=3; i<=MaxNum; i+=2) // +=2 ,不要忘记, 我们不用双数的.
if( PrimeTemp[i]==null ) // 如果是 true , 这就表明 这个没有被做 "记号" , 所以它是 素数.
PrimeArys[ count++ ] = i; // 是 素数 的话, 就存入 PrimeArys 数组.
document.write( PrimeArys.join(" ") , "<br><br>从2到"+MaxNum+"共有素数 "+count+" 个。"); // 用 join()提高输出效率
var t=new Date()-stopwatch;
alert("本次运行了 "+t+" 毫秒。"); //看看 程序运行了多久.二:简单点的<script>
function look(num){
time=new Date();
a=new Array(2,3,5,7,11,13,17,19,23,29,31,37)
for(x=41;x<num;x+=2)
{
if(aa3(x))a[a.length]=x
}
time=new Date()-time;
document.write(a.toString().replace(/\,/g,"<br>"))
alert("共"+a.length+"个,用时"+time+"毫秒")
}function aa3(n)
{
if(n%3==0)return false
if(n%5==0)return false
var b=a.length
for(var y=3;y<b;y++){if(n%a[y]==0)return false}
return true
}</script>
<input id=aa value=10000><input type=button value=计算 onclick=look(aa.value)>
测试 10 万以下的质数: 程序代码
// 获得 0 到 limit 之间的素数
// author: dron
function getPrimeNumbers(limit){
var result = [2];
var is;
if(limit < 2)
return [];
for(var i = 3, s; i <= limit; i += 2){
is = true;
s = Math.sqrt(i);
for(var j = 0, r, l = result.length; j <= l; j ++){
r = result[j];
if(r > s)
break;
if(i % r)
continue;
is = false;
break;
}
is && result.push(i);
}
return result;
}算法二: 程序代码
var stopwatch = new Date(); // 计时器, 初始化.
var MaxNum = 100000; // 查找 2到MaxNum 这范围内的素数 ( MaxNum 要>= 2 ).
var i, j; // 计数器.
var count = 1; // 初始化素数的个数, 因为我们从2开始计, 所以初始化为 1.
var PrimeTemp = []; // 在这个数组做记号, 做了记号的, 全不是素数.
var PrimeArys = [2]; // 贮存素数的 数组. 因为 MaxNum >= 2, 所以第一个数组元素的值为 2 .
var oNum = Math.ceil( Math.sqrt( MaxNum ) ); // 为什么用 开方? 看到下面2个 for 没.
// 把不是素数的做 "记号".
for(i=3; i<oNum; i+=2) // +=2 ??? 我们整个程序都不用双数, 全用单数, 这样就快2倍了.
if( PrimeTemp[i]==null ) // 初始化 PrimeTemp 的数组, 数组里面当然什么都没有.
for(j=i; i*j<=MaxNum; j+=2) // i 的 j 倍一定不是素数, 但我们要 i*j 来看看是否超过了 MaxNum
PrimeTemp[ i*j ] = 0; // 初始化 PrimeTemp 里的元素, 现在来帮它们做一个 "记号". 因为这个元素"不是"素数.
// 输出素数了.
for(i=3; i<=MaxNum; i+=2) // +=2 ,不要忘记, 我们不用双数的.
if( PrimeTemp[i]==null ) // 如果是 true , 这就表明 这个没有被做 "记号" , 所以它是 素数.
PrimeArys[ count++ ] = i; // 是 素数 的话, 就存入 PrimeArys 数组.
document.write( PrimeArys.join(" ") , "<br><br>从2到"+MaxNum+"共有素数 "+count+" 个。"); // 用 join()提高输出效率
var t=new Date()-stopwatch;
alert("本次运行了 "+t+" 毫秒。"); //看看 程序运行了多久.二:简单点的<script>
function look(num){
time=new Date();
a=new Array(2,3,5,7,11,13,17,19,23,29,31,37)
for(x=41;x<num;x+=2)
{
if(aa3(x))a[a.length]=x
}
time=new Date()-time;
document.write(a.toString().replace(/\,/g,"<br>"))
alert("共"+a.length+"个,用时"+time+"毫秒")
}function aa3(n)
{
if(n%3==0)return false
if(n%5==0)return false
var b=a.length
for(var y=3;y<b;y++){if(n%a[y]==0)return false}
return true
}</script>
<input id=aa value=10000><input type=button value=计算 onclick=look(aa.value)>
追问
这用了函数,。。。不过还是谢谢你,我们还没学函数,看不懂。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询