请于素数的求法??

swungle 2008-10-14 08:56:06
我在网上搜索了素数的许多求法,都是很长的代码.我在书本中看到的一个很简短的代码,不知道理解是否正确,希望,帮忙指点一下.
#include <iostream>
using namespace std;
int main(){
int i,j;
bool isprime;
for(i=2;i<1500;i++){ //输出每个整数的范围
isprime=true; //请问这句代码是否必要出现的。
for(j=2;j<=i/2;j++) //输出所有的约数 ,其中j<=i/2.2是指最小的约数,(不知道一个数字除以最小约数是否就是最大的约数了,请指教一下)

if((i%j)==0)isprime=false; //如果输出的整数能被约数整队,则不是素数,否则则是素数。
if(isprime)
cout<<i<<" is prime.\n";
}
return 0;
}


对于这个代码的实用性不知道有多强,请高手帮一下忙。谢谢!!
...全文
325 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
developsoftware 2009-08-10
  • 打赏
  • 举报
回复
#include <iostream>
#include <math.h>
#include <stdio.h>
using namespace std;
int main()
{
int N;
bool isprime;
cin>>N;

for(int i=2;i<N;i++)
{
isprime=true;
if(sqrt(i) <2)
{
cout<<i<<" is prime.\n";
}
for(int j=2;j<=sqrt(i);j++)
{
if((i%j)==0)
{
isprime=false;
}

if(isprime)
{
cout<<i<<" is prime.\n";
}
}
}
return 0;
}
swungle 2008-10-14
  • 打赏
  • 举报
回复
int i,j;
bool isprime;

for(i=2;i <6;i++)
{
isprime=true;

if(sqrt(i) <2)
{
if(isprime)
{
cout < <i < <" is prime.\n";
}
continue;
}

for(j=2;j <=sqrt(i);j++)
{
if((i%j)==0)
{
isprime=false;
}

if(isprime)
{
cout < <i < <" is prime.\n";
}
}
}

编译出错啊!!无法完成编译。
dzc8866 2008-10-14
  • 打赏
  • 举报
回复
素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。另一方面,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。

你的程序有点问题,对于数字2和3判断不出来,我只是做了特殊处理,没有去想怎么改判断条件,i/2可以改成sqrt(i),注意把头文件包进去#include "math.h"

int i,j;
bool isprime;

for(i=2;i<6;i++)
{
isprime=true;

if(sqrt(i)<2)
{
if(isprime)
{
cout <<i<<" is prime.\n";
}
continue;
}

for(j=2;j<=sqrt(i);j++)
{
if((i%j)==0)
{
isprime=false;
}

if(isprime)
{
cout <<i<<" is prime.\n";
}
}
}
swungle 2008-10-14
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
int main(){
int i,j;
bool isprime;
for(i=2;i<100;i++){
isprime=true;
for(j=2;j<=i/2;j++) //那把j<=i/2改成sqrt()的整个代码要做怎么样的修改呢??
if((i%j)==0)isprime=false;
else
if(isprime)
cout<<i<<" is prime.\n";
}
return 0;
}

dzc8866 2008-10-14
  • 打赏
  • 举报
回复
素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。另一方面,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。

你的程序有点问题,对于数字2和3判断不出来,我只是做了特殊处理,没有去想怎么改判断条件,i/2可以改成sqrt(i),注意把头文件包进去#include "math.h"

int i,j;
bool isprime;

for(i=2;i<6;i++)
{
isprime=true;

if(sqrt(i)<2)
{
if(isprime)
{
cout <<i<<" is prime.\n";
}
continue;
}

for(j=2;j<=sqrt(i);j++)
{
if((i%j)==0)
{
isprime=false;
}

if(isprime)
{
cout <<i<<" is prime.\n";
}
}
}
skyering 2008-10-14
  • 打赏
  • 举报
回复
假设A有一个因数a>floor(sqrt(A)),那么A/a <A/floor(sqrt(A)) <=ceil(sqrt(A))
所以A/a <=floor(sqrt(i))。也就是说A/a是A的小于等于sqrt(i)的因数。
正解。这样减少了循环次数,提高了效率啊!
FWing 2008-10-14
  • 打赏
  • 举报
回复
一个数如果有非平凡的因数(即除1和它本身外),那么它必然有一个小于等于sqrt(i)的因数。
证明很简单啊。
假设A有一个因数a>floor(sqrt(A)),那么A/a<A/floor(sqrt(A))<=ceil(sqrt(A))
所以A/a<=floor(sqrt(i))。也就是说A/a是A的小于等于sqrt(i)的因数。
swungle 2008-10-14
  • 打赏
  • 举报
回复
那些解释是我自己加上,就是不知道自己的理解怎么样,是否正确,还是有1/2改为sqrt(i)不知道为什么要这样改呢??
xf_pan 2008-10-14
  • 打赏
  • 举报
回复
isprime=true; //请问这句代码是否必要出现的。
显示初始化,,如果不初始化,,isprime为false..

后面的注释都很清楚了。。
适用性,,我记得素数只要判断到它不能整除2到它的平方根就行了。。
i/2 改为 sqrt(i)
内容概要:本文围绕“新型电力系统下多分布式电源接入配电网承载力评估方法”的研究,系统性地介绍了基于Matlab的仿真建模与代码实现方案,旨在评估高比例分布式电源(如光伏、风电等)接入背景下配电网的接纳能力。研究融合了智能优化算法(如蜣螂优化、灰狼优化、遗传算法)、多目标优化、鲁棒优化及双层优化模型,结合潮流计算、稳定性分析与故障仿真,构建了完整的承载力评估体系。文档不仅提供核心算法实现,还拓展至微电网调度、储能配置、电氢耦合系统、电动汽车协同等前沿方向,强调“复现+创新”相结合的科研路径,助力研究者快速掌握高水平论文复现技巧并激发原创思路。; 适合人群:具备电力系统、自动化或相关专业背景,熟悉Matlab/Simulink仿真环境,正在从事科研或工程应用的研究生及初级科研人员(工作1-3年);; 使用场景及目标:①复现高水平期刊中关于配电网承载力的优化模型;②开展高比例可再生能源接入下的配电网规划与运行研究;③学习并应用智能优化算法解决复杂电力系统问题;④获取完整科研资源包以加速课题进展与论文撰写; 阅读建议:建议读者关注公众号“荔枝科研社”获取网盘资源,下载全套代码与模型文件,按照文档结构循序渐进学习,重点理解算法设计逻辑与仿真建模细节,结合所提供的复现案例深化对优化模型与工程应用场景的理解,提升科研效率与创新能力。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧