java - 我对这个程序中使用的逻辑感到困惑,需要深入解释
问题描述
public class Prime
{
public static void main(String args[]){
int i,m=0,flag=0;
int n=3;//it is the number to be checked
m=n/2;
if(n==0||n==1){
System.out.print(n+" is not prime number");
}
else
{
for(i=2;i<=m;i++)//Why are we using m here?
{
if(n%i==0){
System.out.print(n+" is not prime number");
flag=1;
break;
}
}
if(flag==0) { System.out.print(n+" is prime number"); }
}//end of else
}
}
我很难理解,我们为什么要使用这种逻辑?[for(i=2;i<=m;i++)] 'm' 在这里的作用是什么?
解决方案
您需要注意这一行:
m = n / 2
m
在for
循环中用于限制完成的迭代次数。前面的语句意味着循环将从 2 变为 n. 值的一半。这样做是为了“优化”该算法的执行时间,因为超过一半的数字的除数并不意味着覆盖。
这不是该算法的最佳优化。更好的方法是将for
循环限制到 n 的平方根:
m = (int)Math.sqrt(n);
推荐阅读
- reactjs - 无法使用 Create-React-App 在 github 页面中发布我的反应应用程序 - 控制台出现错误
- r - 带置信区间的滚动回归(tidyverse)
- javascript - 每秒运行一次函数 X 次
- sql - 卡在 SQL Server 过程代码上
- c# - 使用嵌套属性动态生成 LINQ 选择
- java - Bamboo 使用 JAVA_HOME 失败应该指向 CentOS 7 上 Maven 任务中的 JDK 而不是 JRE
- android - 映射超类
- jquery - 使用 Jquery 从没有后端的 HTML 表中减去值
- restful-url - 如何通过 RESTful 访问 IBM Cloud Object Storage 上的文件
- ios - WKWebView 加载 html 代码而不是内容(iOS)