我写了一个程序来确定给定数字的因子。首先,它当然应该检查这个数字是否是素数。这是可行的,但是如果这个数字是平方数,它会把它识别为素数...
public class factors {
public static void main (String [] args) {
System.out.println("Enter the number you need factors of");
int base = Kon.readInt();
for (int i = 2; i < base; i++) {
int a = base % i;
if (a == 0) {
break;
}
else {
System.out.println(base+" is a prime number, so it has no factors");
break;
}
}
for (int i = 3; i < base; i++) {
int res = base % i;
if (res == 0) {
int fac = base / i;
System.out.println(i+" and "+fac+" are factors of "+base);
}
}
}
}
所以如果我输入64,它说这是一个素数,但随后告诉我8和8是下一行中64的因子
有人知道问题是什么吗?
问题是
if (a==0) {
break;
} else {
System.out.println(base+" is a prime number, so it has no factors");
break;
}
当一个数不能被i
整除时,将输出它不是一个素数,所以在决定它不是素数之前,您必须首先完全遍历它。
所以你想改变:
for (int i=2;i<base;i++) {
int a=base%i;
if (a==0) {
break;
}
else {
System.out.println(base+" is a prime number, so it has no factors");
break;
} // end of if-else
}
进入:
prime = true;
for (int i=2;i<base;i++) {
int a=base%i;
if (a==0) {
prime = false;
break;
}
}
if (prime){
System.out.println(base+" is a prime number, so it has no factors");
} // not a prime
if (a == 0) {
break;
}
else {
System.out.println(base+" is a prime number, so it has no factors");
break;
}
不管怎样,你在第一个增量上就打破了循环。即使你删除了中断
在else
块中,您仍在显示该数字是否太早为素数。您需要在所有迭代完成后确定。
因此,考虑一个boolean
变量来跟踪数字中是否至少包含一个因子:
boolean isPrime = true; // true unless proven otherwise
for (int i = 2; i < base; i++) {
int a = base % i;
if (a == 0) {
isPrime = false; // has factor so it's not prime
break;
}
}
if (isPrime) {
System.out.println(base + " is a prime number, so it has no factors");
} else {
System.out.println(base + " is a composite number: "); // say it's not prime
// then display the factors
for (int i = 3; i < base; i++) {
int res = base % i;
if (res == 0) {
int fac = base / i;
System.out.println(i + " and " + fac + " are factors of " + base);
}
}
}
这是给全班同学的小礼物。
问题是,在循环中打印它是一个素数,这样,当至少有一个i
的值base%i
为0
时,就可以假装一个数是素数。
你应该检查i
的值是否为真。例如,您可以这样做:
boolean hasFactor = false;
for (int i=2;i<base;i++) {
int a=base%i;
if (a==0) {
hasFactor = true;
break;
}
}
if (!hasFactor){
System.out.println(base+" is a prime number, so it has no factors");
}
当插入数据数值“财政月份的第5周”不被识别时,我得到了这个错误,我甚至没有在我的SQL中的错误消息中显示的字段,请参见附加的代码。我不知道要找什么,我在这里发帖,至少请给我指出一个我需要寻找的主题
我不知道为什么,但它只是偶尔查找、转换和转录目录中的所有mp3文件,但从来没有100%的时间。我不知道为什么。我希望我的要求是正确的。我的目标是找到所有m4a文件,然后转换为wav文件,然后找到所有wav文件并转录它们。程序有时会执行此操作,但不是所有时间都执行此操作。 编辑:我犯了一个非常愚蠢的错误,我用相同的名称命名所有输出的文本文件,所以它们会被覆盖。我确保给它们一个唯一的名称,将名称降到毫
平滑度 平滑度参数,同时存在于标准着色器的金属模式和镜面模式中。 平滑度概念同时支持镜面模式和金属模式,并且工作方式也一样。默认情况下,没有指定金属或镜面纹理贴图,材质的平滑度通过一个滑动器控制。这个滑动器允许你控制『表面微观节』或整个表面的平滑度。 不管是哪种着色器模式,如果为金属属性或镜子属性使用了纹理题图,平滑度的值将从该贴图中读取。更多细节会在本页的后面介绍。 平滑度的值范围为从 0 到
在准备数据分析师面试问题时,我发现“使用熊猫在“一行”中找到所有重复的电子邮件(不是唯一的电子邮件)。” 我最好的不是一行,而是三行: 后一个注释后面的第二个代码块是否可以压缩成一行代码,避免使用临时变量< code>results?
编程新手,刚刚开始使用Java。我拿不到那张票要使用字符的操作数。这与while循环有关。即使放置了正确的输入。循环不断地说,这是一个无效的输入,尽管正确的输入被放置。 输入被正确识别并转换为大写。但是同时循环不起作用。任何建议将不胜感激!
我是一个从Matlab到python的新转换者,我正在努力生成一个复杂的数组。 在matlab中,我有以下代码: 我试图在python 3中复制: 但是,我得到以下错误: 我做了一点谷歌,我不知道如何模仿matlab的行为在这种情况下?有什么建议吗?