在C++中求解Project Euler和数3时出错
Error while solving Project Euler sum number 3 in C++
这是我的代码:
#include <iostream>
using namespace std;
int main()
{
long int x = 1;
long int res;
while (x<600851475143)
{
x++;
if(600851475143%x==0)
{
res=x;
cout<<x<<"n";
}
}
}
我不知道它出了什么问题,但它给了我这样的输出:
839
1471
6857
59569
104441
486847
1234169
5753023
10086647
87625999
408464633
716151937
-716151937
-408464633
-87625999
-10086647
-5753023
-1234169
-486847
-104441
-59569
-6857
-1471
-839
-71
-1
Floating point exception
Process returned 136 (0x88) execution time : 156.566 s
Press ENTER to continue.
当我用13195代替600851475143时[在这个例子中]。。。它运行良好。。。并给我这个输出:
5
11
55
11149
Process returned 0 (0x0) execution time : 0.005 s
Press ENTER to continue.
我不知道我做错了什么。。。:/
也许我以前的程序运行不正常。。。我一开始用int试过,然后改成long int…没什么区别。。。
负值是由于溢出造成的。首先使用无符号整数而不是有符号整数。此外,在32位计算机中,long int
和int
类型都是32位。
unsigned long long int x = 1;
unsigned long long int res;
此外,您可以强调这样一个事实,即这些常量是无符号
while (x<600851475143U)
{
x++;
if(600851475143U%x==0)
{
res=x;
cout<<x<<"n";
}
}
当您的正数在++
之后突然变为负数时,这是整数溢出的确定符号。您需要选择一种能够容纳较大整数的数据类型,例如long long
。
另一方面,您的算法并没有按照问题中的要求搜索最大的素数因子。它搜索最大的因子,而这个因子不一定是素数。
顺便说一句,如果你能证明在达到被计算数字的平方根时停止搜索是正确的,你可以大大加快你的程序。
您的变量类型不能包含12位数。典型的unsigned long int
可以存储0到4294967295,对于已签名的-−2147483648到2147483647。
尝试使用unsigned long long
,它应该至少存储18446744073709551615(这个数字我甚至无法想象)。
下面的代码将显示用户输入的数字的所有素数。但600851475143是一个太大的数字,无法找到其主要因素。修改这个程序可以看到600851475143的素因子,也可以修改它来找出它们中最大的素因子。我学c++才两个月,所以我只能帮你这么多。一切顺利。
#include<iostream.h>
#include<conio.h>
class primefactor
{
unsigned long int a;
public:
void factor();
};
void primefactor::factor()
{
cout<<"Enter any number to see its prime factors";
cin>>a;
int count=0;
int count1=0;
for(unsigned long int loop1=a;loop1>=1;loop1--)
{
if(a%loop1==0)
{
for(unsigned long int loop=loop1;loop>=1;loop--)
{
if(loop1%loop==0)
{
count++;
}
}
if(count==2)
{
count1++;
cout<<loop1<<"t";
}
}
count=0;
}
cout<<"n"<<"There are"<<count1<<"t"<<"prime factors";
}
void main()
{
primefactor k;
clrscr();
k.factor();
getch();
}
相关文章:
- Project Euler问题4的错误解决方案
- 如何从文本文件中读取值和数组
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- C++向量和数组
- 我要求用户输入大小和数组,但是当我打印矢量时,它仅显示'0'作为输出
- Clang 8 带有静态 constexpr 和数组的链接器错误 - 错误是什么以及如何解决它?
- 这些指针的含义,指针到指针,函数指针和数组指针
- 逐行读取文件,并将数据插入变量和数组中
- p_threads初始化中向量和数组之间的区别
- 有人可以解释一下吗?这是关于数组和数组内部 if 语句的一些处理
- 指针和数组内存
- llvm,通过 C++ API 定义字符串和数组
- 使用结构和数组时的"expected primary expression before '.' token"
- 为什么gzwrite向量和数组值相同的gzwrite数组不同
- 最大的回文产品(Project Euler)——C++
- 如何在使用for循环和数组时更改为c代码
- C/C++中数组结构和数组结构的通用接口
- 列出常量和数组结构字段的初始化
- 使用 cin、if 语句和数组不起作用
- 在C++中求解Project Euler和数3时出错