Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 项目赢得';Don’’我不能带着很大的数字跑步_C++_Variables - Fatal编程技术网

C++ 项目赢得';Don’’我不能带着很大的数字跑步

C++ 项目赢得';Don’’我不能带着很大的数字跑步,c++,variables,C++,Variables,我对编程相当陌生,所以我“C++太好了!”除非它对于int变量来说太大了。现在,我尝试将所有int变量都更改为long-long变量,这样就不重要了,但这似乎无法解决问题。计划如下: #include <iostream> using namespace std; bool prime (long long recievedvalue) { //starts a function that returns a boolean with parameters being a fac

我对编程相当陌生,所以我“C++太好了!”除非它对于int变量来说太大了。现在,我尝试将所有int变量都更改为long-long变量,这样就不重要了,但这似乎无法解决问题。计划如下:

#include <iostream>

using namespace std;

bool prime (long long recievedvalue) { //starts a function that returns a boolean with parameters being a factor from a number
    long long j =1;
    long long remainderprime = 0;
    bool ended = false;
    while (ended == false){ //runs loop while primality is undetermined
        if (recievedvalue == 1){ //if the recieved value is a 1 it isn't prime
            //not prime
            return false;
            break; // breaks loop
            }
        remainderprime=recievedvalue%j; //gives a remainder for testing
        if ((remainderprime==0 && j>2) && (j!=recievedvalue || j == 4)){ //shows under which conditions it isn't prime
        ended=true;
        //not prime
        return false;
        }
        else if (j==1){
            j++;
            }
        else if ( recievedvalue==2 || j==recievedvalue ){ // shows what conditions it is prime
          ended = true;
          //prime
          return true;
            }
            else {
            j++;
            }
        }
    }


long long multiple(long long tbfactor){ //factors and then checks to see if factors are prime, then adds all prime factors together
    //parameter is number to be factored
    long long sum = 0;
    bool primetest = false;
    long long remainderfact;
    long long i=1;
    while (i<=tbfactor){ //checks if a i is a factor of tbfactor
        remainderfact=tbfactor%i;
        if (remainderfact==0){ //if it is a factor it checks if it is a prime
            primetest = prime(i);
        }
        if (primetest ==true){ //if it is prime it add that to the sum
            sum += i;
            primetest=false;
        }
        i++;
    }
    return sum;
}

int main()
{
    long long input;
    long long output;
    cout << "Enter a number > 0 to find the sum of all it's prime factors: ";
    cin >> input;
    if (input == 0 || input <= 0){
        cout << "The number you entered was too small."<< endl << "Enter number a number to find the sum of all it's prime factors: ";
    cin >> input;
        }
    output = multiple(input);
    cout << output << endl << "finished";
    return 0;
}
#包括
使用名称空间std;
bool prime(long-long-receivedvalue){//启动一个函数,该函数返回一个布尔值,参数是数字的一个因子
长j=1;
长余数素数=0;
布尔结束=假;
while(end==false){//在素性未确定时运行循环
如果(receivedvalue==1){//如果接收的值是1,则它不是素数
//非黄金
返回false;
break;//中断循环
}
remainderprime=receivedvalue%j;//为测试提供一个余数
如果((remainderprime==0&&j>2)&&(j!=receivedvalue | | j==4)){//显示在哪些条件下它不是prime
结束=真;
//非黄金
返回false;
}
else如果(j==1){
j++;
}
else if(receivedvalue==2 | | j==receivedvalue){//显示它是素数的条件
结束=真;
//主要的
返回true;
}
否则{
j++;
}
}
}
long long multiple(long long tbfactor){//factors,然后检查因子是否为素数,然后将所有素数因子相加
//参数是要分解的数字
长和=0;
bool-primetest=false;
长期剩余事实;
长i=1;
而(i>输入;

如果(input==0 | | input,我愿意知道你的程序正在运行。我确信有人会突然出现,并在一瞬间给你答案,但我希望这不会发生,这样你就可以体验到我几年前遇到这个问题时所做的同样的事情

执行此操作:从1开始,然后使用2的幂(1、2、4、8、16等),然后继续,每次将输入数加倍。它何时“停止运行?”会逐渐变慢


请在我的帖子或您自己的帖子上发表评论,或编辑您自己的帖子,或发布一个答案,无论您只允许56名代表做什么。如果社区允许的话(当然,我希望社区进一步学习),我想通过一系列来回的反馈而不是典型的方式,轻轻地把你推向答案,因为这是一个明显独特的学习机会。

如果你想知道一个数字是否是素数,这里有一个快速的解决方案

#include <iostream>

using namespace std;

#define ullong unsigned long long

bool prime (ullong x)
{
    if(x <= 1)
        return false;

    ullong s = (ullong)sqrt(x);

    for(ullong i=2;i<=s;i++)
        if(x%i == 0)
            return false;

    return true;
}
#包括
使用名称空间std;
#定义ullong unsigned long long
布尔素数(乌龙x)
{

如果(x这不是问题所在,但
input==0 | |输入一个旁注:您可以通过省略
end
标志来简化
prime
函数:无论何时设置它,实际上都会立即从函数返回。与
break
语句相同。您还可以移动
receivedvalue==1
A的检查循环之前的nd
ReceivedValue==2
。质数必须是自然数。负数不是自然数,0没有因子。我认为ybungalobill的观点是,如果它是==0,那么根据定义,它是可以的"我会试试看,我也更愿意学习!所以我希望他们也允许,我会稍后再发回来。好吧,现在我的计算机正在编译8589934592的值,这需要永远的时间!因为我想要的数字是6000亿……我担心需要多长时间。@Samuraisolization你可能正在看到它正在逐步升级随着时间的推移,花费的时间会越来越长。输入的数字越大,花费的时间也就越长。这意味着随着数字的增加,程序必须做更多的工作才能运行到完成,所以花费的时间也就越长。你能在代码中看到一些需要花费很长很长时间的东西吗?不要按照你可以做的调整思路去做几行让我们运行得更快,按照减少冗余的思路思考。您是否看到代码中的任何地方反复计算相同的精确内容?是的,基本上只要找到一个因素(无论迭代到该因子需要多大或多长时间,它都必须迭代到该因子的新循环,因此需要额外的时间?没错!干得好!现在,你能想出一种方法来克服这个问题吗?这就是我所指的类型。你有没有可能在他发现这个pa之前删除你的答案rt的问题,然后你可以取消删除它并重新引入它?使用typedef而不是那种讨厌的#define为什么迭代到sqrt(x)+1?迭代到sqrt(x)不是很好吗?我认为
sqrt(x)+1
是为了避免1和/或2是误报的问题。(我不是肯定的。有一段时间没有使用过素数)由于他处理的是一个
无符号long-long
,小于2的sqrt(2)被降到了1。因此for循环永远不会被输入,对于2将返回true。