[英]Is there a smart way to use large numbers in C++
由於大學關閉,所有考試都因電暈而取消,我開始用 C++ 編寫質因數分解算法。 有沒有辦法使用比unsigned long long int
更大的數字? 但我必須能夠通過終端輸入數字並用它計算。
到目前為止,這是我的代碼:
#include <iostream>
#include <bits/stdc++.h>
unsigned long long int number = 1;
int main(int argc, char **argv)
{
while(1){
std::cout << "Please enter a number: ";
unsigned long long int counter = 2;
unsigned long long int root = 1;
int err = scanf("%llu",&number);
if(err != 1){
number = 1;
std::cerr << "NOPE" << std::endl;
return 1;
}else{
std::cout << "Prime factors of " << number << " are: "<< std::endl;
if(number < 2){
number = 1;
root = 1;
}else{
root = sqrt(number);
}
while(number != 1){
// If number % counter == 0, counter must be a prime factor!
if(number % counter == 0){
number = number / counter;
root = sqrt(number);
std::cout << counter << std::endl;
// If number is smaller than root it must be the last prim factor!
}else if(number < root || number < counter){
std::cout << number << std::endl;
break;
}else{
counter++;
}
}
}
}
return 0;
}
也許提升多精度庫?
GMP 是一個非常高性能的庫,用於 C 中的任意精度整數數學運算,也可以在 C++ 中使用。 有一個字符串轉換函數,它允許您接受來自終端或其他字符串源的輸入。
Stack Overflow 上也已經存在關於使用 GMP 進行素數分解的問題:)
嗨,如果你想理解並創建一個好的代碼來做這些事情,你必須學習一個非常重要的數學主題“數論”。 一本好書可能是卡夫,華盛頓的。 檢查並學習,你會發現由於基礎表示和數論,一些微積分會更有效和更容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.