项目欧拉3 -最高素数因子
Project Euler 3 - Highest Prime Factor
在我开始之前,我想澄清我是不是寻找代码示例来获得答案;那就会破坏欧拉计划的目标。
问题可以在这里找到http://projecteuler.net/problem=3
我想我有解决这个问题的方法,但是算法非常慢;它已经运行了将近两个半小时。所以我正在寻找关于优化的一般建议。
谢谢。
#include<iostream>
using namespace std;
bool primality(int);
int main(){
long long lim = 600851475143;
long long div = lim/2;
bool run = true;
while(run){
if(lim%div==0 && primality(div)){
cout << "HPF: " << div;
run = false;
}
else{
div--;
}
if(div<=1){
break;
}
}
return 0;
}
bool primality(int num){
for(int i=2; i<num; i++){
if(num%i==0 && i!=num){
return false;
}
else{
return true;
}
}
}
如果您从2开始div
并向上而不是向下计数,并在模为零时将其从数字中除去,您将获得两个有用的大优势:
- 你不需要检查
div
是否为素数,因为它不可能是合数,因为任何小于它的素数因子都已经被除去了。 - 每次找到一个因子时,您都会减少剩余问题的大小,并且,事实证明,输入数字具有相当小的素数因子。
也可以在div*div
大于剩余数时中断,因为此时您知道它一定是素数。这是因为任何大于平方根的因子都与小于平方根的因子"配对"。然而,由于这是一个"简单"的问题,因此这里不需要此优化(尽管它对以后的问题很有用)。
# Possible solution but still its *time consuming* but answer can be guessed by the last option in console output
#include<stdio.h>
#include<string>
#include<iostream>
#include<math.h>
int prime(unsigned long long);
using namespace std;
int main(){
unsigned long long ii, ij; unsigned long long in;
cin>>in; ij = ceil(in/2);
if( (ij % 2) == 0 ) ij -= 1;
for(ii = 3 ;ii < ij;ii+= 2){
if(in % ii == 0){
if(prime(ii) == 1 ){
cout<<" ans "<<ii<<endl;
}
}
}
return 0;
}
int prime(unsigned long long ii){
unsigned long long ij;
for(ij = 3;ij < ii/2 ;ij += 2){
if( (ii % ij) ==0){
return 0;
}
}
return 1;
}
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法在 CLion 中构建 C++ 项目
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 欧拉项目#8答案是大以获得有效答案
- 从链接列表c++中删除一个项目
- C++中的素数生成器(alex allain跳到C++中)
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 既然存在危险,为什么项目要使用-I include开关
- cmake在我的项目中所需的所有静态库都不成功
- QT通过C++添加映射QML项目
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 在linux上调试巨大的C++项目
- 如何从安卓、高通设备获取射频/NV项目?
- 对于我在 Microsoft Visual C++ IDE (2005 或更高版本)的本机 win32 项目中编写的应用
- 欧拉#8项目,我不知道为什么我的代码给出了荒谬的高值
- Qt Creator c++11语法高亮显示通用项目
- 项目欧拉3 -最高素数因子
- 欧拉项目 #10 如何预先计算素数的总和