带计数器的独特因式分解
Posted
技术标签:
【中文标题】带计数器的独特因式分解【英文标题】:Unique factorization with counter 【发布时间】:2018-10-30 08:13:22 【问题描述】:我正在尝试在 JAVA 中构建一个使用唯一分解定理的程序。 我的意思是,从用户那里得到一个大于 1 的数字,然后用计数器打印所有唯一的因式分解。
例如,对于 100,输出应该是
2 2
5 2
因为 100=2*2*5*5
对于 23,输出应该是
23
如果输入为6,则输出为
2
3
最后一个例子,对于 8112,输出应该是
2 4
3
13 2
到目前为止,我实现了一个代码,它给出了第一列并纠正了素数。但是当计数器 >1 打印第二列时,我没有成功计数。
我的代码如下:
int n = scanner.nextInt();
int num = 2;
while (num <= n)
int i = 2;
boolean isPrime = true;
while (i < num && isPrime)
if (num % i == 0)
isPrime = false;
i++;
if (isPrime)
int counter = 1;
if (n % num == 0)
System.out.println(num);
num++;
任何想法我错过了什么?
【问题讨论】:
int ounter = 1
的目的是什么?它从不在定义的范围内使用。
将n
除以i
(重复),而i
是一个因素。而且您只需要检查到i*i <= n
。
@BluesSolo 这可能是尚未完全实施的计数器(那里的错字)。
@BluesSolo 应该是一个“计数器”。当n mod(素数)除以多个相同素数时,此变量需要计算所有时间。
【参考方案1】:
您的counter
尚未实施。
int n = scanner.nextInt();
int num = 2;
while (num <= n)
int i = 2;
boolean isPrime = true;
while (i < num && isPrime)
if (num % i == 0)
isPrime = false;
i++;
if (isPrime)
int counter = 0;
while (n >= num && n % num == 0)
counter++;
n /= num;
if (counter == 1)
System.out.println(num);
else if (counter > 1)
System.out.println(num + " " + counter);
num++;
【讨论】:
【参考方案2】:找到号码后,你必须继续找到那个计数器。以下是我的解决方案。
int ounter = 0;
if (n % num == 0)
System.out.print(num);
int n1 = n;
while(n1%num == 0)
ounter ++;
n1 = n1/num;
if(ounter != 1)
System.out.println(" "+ounter);
【讨论】:
以上是关于带计数器的独特因式分解的主要内容,如果未能解决你的问题,请参考以下文章
软件架构分解LinkedIn日志系统GWT HTML5支持——架构周报