→ meconin:Compile 應該會過吧?沒有不符合 Syntax 01/16 18:05
不好意思,如果是當作C編譯的話是的確會只會產生warning:
error: passing argument 2 of `__gmpz_init_set_str' from incompatible
pointer type [-Werror]
note: expected `const char *' but argument is of type `struct __mpz_struct *'
不過如果是當C++編譯的話就會直接變成error了(我原本是這樣做的...):
error: cannot convert `__mpz_struct*' to `const char*' for argument `2'
to `int __gmpz_init_set_str(mpz_ptr, const char*, int)'
不過無論如何,原本的code本身就大有問題,就算編得過跑了也會爛掉...
※ 編輯: PkmX 來自: 140.113.252.42 (01/16 23:50)
※ 引述《NoirCat (Noir)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: VC++
: 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
: gmp.lib gmpDebug.lib
: 問題(Question):
: 想要輸入一任意長度整數後做Miller-Rabin
: 並且在輸入到字元時顯示輸入錯誤7
: 程式碼(Code):(請善用置底文網頁, 記得排版)
: mpz_t n, x;
: mpz_init(x);
: printf("Test Number:");
: gmp_scanf("%s",&x);
: mpz_init_set_str(n, x, 10);
: //接著使用n進行Miller-Rabin
: 補充說明(Supplement):
: 輸入字串可以成功存入x
: 但在mpz_init_set_str執行後只有前20位可以設入n
: 且執行後將x印出會變成20位數字+1符號
: 要如何使所有輸入數字皆設入n呢?
你的函式根本就完全用錯了吧?應該根本就編不過才對...(?)
你應該去看看gmp的documentation,上面寫得很清楚
用gmp要讓使用者輸入數字,然後存入mp[zqf]_t有兩種方法:
1. 直接call gmp_scanf(const char* fmt, ...):
#include <gmp.h>
int main()
{
mpz_t z;
mpz_init(z);
gmp_scanf("%Zd", z); // %Z for mpz_t, %Q for mpq_t, %F for mpf_t
// Note that we don't pass the address of z.
// miller_rabin(z, k);
return 0;
}
2. 先讀入一個NULL-terminated字串,然後用mp[zf]_init_set_str()初始化它:
#include <stdio.h>
#include <gmp.h>
int main()
{
char buf[256];
scanf("%255s", buf);
mpz_t z;
mpz_init_set_str(z, buf, 10); // Initialization and assignment.
// miller_rabin(z, k);
return 0;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.252.42