如何解析素数c+的倍数+;? 我是C++初学者,并且尝试学习算法。
我正在尝试创建一个控制台应用程序,该应用程序可以获取整数和素数的倍数。例如,获取12并显示3*2*2 12=3*2*2 但我有问题。我写了这样的东西如何解析素数c+的倍数+;? 我是C++初学者,并且尝试学习算法。,c++,algorithm,math,primes,C++,Algorithm,Math,Primes,我正在尝试创建一个控制台应用程序,该应用程序可以获取整数和素数的倍数。例如,获取12并显示3*2*2 12=3*2*2 但我有问题。我写了这样的东西 int prime (int a){ int i ; if ( a == 2 ){ return 1 ; } for (i=2; i < ((a/2)+1) ;i ++){ if (a%i == 0){ return 0;
int prime (int a){
int i ;
if ( a == 2 ){
return 1 ;
}
for (i=2; i < ((a/2)+1) ;i ++){
if (a%i == 0){
return 0;
}
}
return 1 ;
}
int main() {
int number;
int tmp;
//int primes[];
cout << "Enter a number:" << endl;
cin >> number;
tmp = number;
int i = 2;
for (i; i <= number ; i++){
if (prime(i)) {
tmp = number/i;
cout << tmp <<endl;
}
}
return 0;
}
intprime(inta){
int i;
如果(a==2){
返回1;
}
对于(i=2;i<((a/2)+1);i++{
如果(a%i==0){
返回0;
}
}
返回1;
}
int main(){
整数;
int tmp;
//整数素数[];
库特数;
tmp=数量;
int i=2;
对于(i;i我将省略“这可以做得更好”的问题。代码中有3个问题使其不正确:
检查i是否为素数,但不检查它是否为除数。附加提示:检查tmp的赋值
输出的是商,而不是势因子
您将错过重复因素
- 创建素数数组,不要每次都计算它们。在创建数组时,只检查素数上的除法,直到sqrt(n)。这里没有错误,只是更好
- 检查n的素数除数,对于当前的素数p,只有当n可以再除以p时,才能转到下一个素数
- 成功除以p后,更改该除法结果的检查编号
在本规范中:
if (prime(i)) {
tmp = number/i;
cout << tmp << endl;
}
if(素数(i)){
tmp=数量/i;
CUTE你是否尝试用调试器调试你的代码,或者甚至用简单的CUTs?@ DavidKernin调试器如果算法是错误的(如果它是提示),那就不好了。我说我是C++初学者,并且尝试学习一些东西。现在我想解决这个问题,这对我来说是很简单的。但是对我来说这很难…(请帮我解决:)@DieterLücking据我所知,调试器是用来使算法正确的:\n但不管怎样,他是个初学者,我不能要求这样做。@阿明,大卫建议你在代码的关键位置添加一些cout
语句,这样你就可以看到算法在计算时是如何进步的。这将给你一个关于它失败了。