12/03/16 19:44:28.87
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.77【環境依存OK】
スレリンク(tech板)
◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。
【アップローダー】(質問が長い時はココ使うと便利)
URLリンク(codepad.org) (コンパイルもできるし出力結果も得られる[]privateをチェック)
URLリンク(ideone.com) (時間帯によってはcodepadが重い事があるのでここも利用)
2:デフォルトの名無しさん
12/03/16 20:36:37.68
>>1乙なんだからね
3:デフォルトの名無しさん
12/03/17 16:58:26.65
環境依存とか嫌なんだけど(´・ω・`)
4:デフォルトの名無しさん
12/03/17 18:17:19.15
c++で3dゲーム作るとしたらどんな風なdll?がおすすめですか
5:デフォルトの名無しさん
12/03/17 18:20:35.69
DirectXとかOpenGLとかマジオススメ
6:デフォルトの名無しさん
12/03/17 19:13:40.72
>>5
それ以外に道がない
7:デフォルトの名無しさん
12/03/17 19:37:23.13
>>4
上位レイヤーなら
Ogre, Unreal Engine, Irrlichtとか
8:デフォルトの名無しさん
12/03/17 19:38:04.45
>>4
で、もし言語にこだわらずゲームが作りたいだけならUnityおすすめ
9:デフォルトの名無しさん
12/03/17 23:30:50.56
>>5-8
directxはよく見ますがそれ以外は聞いたことがないのばかりです
色々面白そうなのでかまってみます
10:デフォルトの名無しさん
12/03/19 00:23:10.50
C++複雑過ぎてコンパイルするのが怖い
classのメンバ関数のconst参照、演算子の多重定義、テンプレート
Cってすごくシンプルでいい言語だったな・・・
11:デフォルトの名無しさん
12/03/19 00:56:40.78
>>10
やりたい事を実行するのに必須のもんだったら別に怖いって事は無いだろうけどな。
選択権が無いのなら、お気の毒。
12:デフォルトの名無しさん
12/03/19 01:02:12.25
いや、クラスが複雑になってきてコンパイルエラー治すのに今3、4時間かかったからさ
もちろん選択権ありありで、好きでそんなC++やってるよ
13:デフォルトの名無しさん
12/03/19 14:47:06.48
5MBほどメモリ領域を必要とするメンバ変数を持つクラスがあるんだが
インスタンスをグローバル領域で生成すればスタックには格納されないよね?
謎のスタックオーバーフローで悩まされている・・・
14:デフォルトの名無しさん
12/03/19 14:52:55.24
ヒープじゃダメなんですか
15: ◆QZaw55cn4c
12/03/21 00:12:46.40
gcc4, printf() で long long unsigned int を表示するときには、%の後になにをつければいいの?何をつけても警告がでるんだけど。
16:llu
12/03/21 00:38:16.24
>何をつけても警告がでるんだけど。
大袈裟だな。
アスキーキャラクタ 1~10文字のすべての組み合わせ試したのか?
17:デフォルトの名無しさん
12/03/21 00:38:24.29
lluでもなんでも好きなの使え
ちゃんと俺にもモリタポ払うんだろうな?
18:デフォルトの名無しさん
12/03/21 01:00:32.29
グローバル変数の初期化順番について質問があります。
test1.cpp
---------------------------
std::string a("test1");
test2.cpp
---------------------------
std::string b(a);
両方の変数がグローバル変数だったとして、この場合bの文字列が"test1"になるかは不明ですよね
で、次の場合でも文字列bが確実に"test1"になってはくれないのでしょうか?
test1.cpp
---------------------------
const std::string &testinit(){
static std::string a("test1");
return a;
}
test2.cpp
---------------------------
b(testinit());
よろしくお願いします。
19:デフォルトの名無しさん
12/03/21 01:01:42.85
おk
20:デフォルトの名無しさん
12/03/21 01:13:32.11
>>19
なりますか。
でもなんか変な感じがします。
最初のやつもbが"test1"になることを保証してもいい気がするんですが
21: ◆QZaw55cn4c
12/03/21 01:34:55.92
>>17
5000モリタポお送りしたいのですがトリップがわからなくてごめんなさい。お知らせいただいてもいいのですが、>>17のトリップであることを証明してくださいね。:-)
22:デフォルトの名無しさん
12/03/21 06:40:59.83
>>10
たまにC#使うとコンパイルの速さにビビる。
23:デフォルトの名無しさん
12/03/21 07:45:04.57
ヘルスバーグなら速いだろうな
24:デフォルトの名無しさん
12/03/21 08:58:40.76
>>21
お前最低な性格だな
25:デフォルトの名無しさん
12/03/21 09:41:07.25
つーか、%lluなんてマニュアルページに書いてあることを質問している段階で馬鹿確定。
その馬鹿の性格なんてどうでもいい。
26:デフォルトの名無しさん
12/03/21 10:30:50.38
そんな馬鹿のためにモリタポの可能性を潰されそうになってるのがムカつくわ
27: ◆QZaw55cn4c
12/03/21 19:03:51.29
>>24
その言葉、当方には最大の賛辞と解釈します。なにせ、URLリンク(en.wikipedia.org) こそ最高のありかたと考え日々実践していますので。
28:デフォルトの名無しさん
12/03/21 19:58:23.60
ダブルチンコ? なんと奇遇な?
29:デフォルトの名無しさん
12/03/21 21:15:55.03
>>27
なんか勘違いしてるな。哲学の無い矛盾はただのアホだぞ
30:デフォルトの名無しさん
12/03/21 23:44:01.92
屑がダブルチンコwwww
31:デフォルトの名無しさん
12/03/22 07:13:18.34
初心的な質問ですが
テキストエディタなどは
文字の量などでメモリのサイズが可変的だとおもうのですが
こういうのはあらかじめある程度の領域を確保して
必要になるとまたある程度の領域を追加で確保するという形をとっているのでしょうか?
またその中で消したりなどをした際には配列を手前へとずらしているのでしょうか?
32:デフォルトの名無しさん
12/03/22 09:11:38.31
>>31
プログラミング作法を読むといいよ。
まぁ、行単位か頁単位でリンクトリストするとかstd::deque辺りを使っていると思う。
33:デフォルトの名無しさん
12/03/22 09:12:25.47
間違えた、「ソフトウェア作法」だった。
34:デフォルトの名無しさん
12/03/22 10:14:56.34
ギャップバッファ最強
35:デフォルトの名無しさん
12/03/23 10:47:17.89
スタック、ヒープ領域につい素人的な質問ですが
以下のようにAのインスタンスを動的に作成した場合は、Aのメンバ変数のBインスタンスもヒープ領域に確保されるということでよいですか?
class A{
B b;
};
class B{
int nHoge;
};
A a = new A;
36:デフォルトの名無しさん
12/03/23 11:04:45.20
うn
37:デフォルトの名無しさん
12/03/24 08:05:41.49
いま始めたばかりの初心者なのですが、
サイト見ながら素数判定のプログラムを書いたので
実行したいのですが、どこから実行するかどなたか教えてください
38:デフォルトの名無しさん
12/03/24 10:35:53.39
コンパイラや開発環境と呼べるようなものを持っているなら、
まずはそれの名前を書け
持っていないなら、それらをインストールしろ。
常用にはすすめられないが↓みたいなものある
【アップローダー】(質問が長い時はココ使うと便利)
URLリンク(codepad.org) (コンパイルもできるし出力結果も得られる[]privateをチェック)
URLリンク(ideone.com) (時間帯によってはcodepadが重い事があるのでここも利用)
39:デフォルトの名無しさん
12/03/24 12:18:04.67
wxWidgets2.9とmingwを使用しています。
コンパイルの仕方についての質問ですが、、このスレでよいでしょうか?
40:デフォルトの名無しさん
12/03/24 12:47:15.46
RTFM
41:デフォルトの名無しさん
12/03/25 00:50:40.96
STLで2つのコンテナの合成アルゴリズムありませんか?
例えばvector A, Bの全要素に対してplus関数オブジェクトを適用すればA[i] += B[i]してくれるようなもの。
42:デフォルトの名無しさん
12/03/25 00:54:11.55
transformでいけそうです
43:デフォルトの名無しさん
12/03/25 00:59:51.63
VC++2008はいつC++11に対応するんですか?
44:デフォルトの名無しさん
12/03/25 01:01:25.78
2010ですら中途半端なのに
45:デフォルトの名無しさん
12/03/25 01:15:00.78
transformじゃできなかったです!!どうすればいいでしょうか
46:デフォルトの名無しさん
12/03/25 01:35:14.86
>>45
できるだろ
URLリンク(codepad.org)
47:デフォルトの名無しさん
12/03/25 01:42:34.17
ほんとだ。ありがと。
よく見たらbinary_function継承したクラスにコンパイルエラーが出てて
実行されてたのは修正前の古いexeでした。
48:デフォルトの名無しさん
12/03/25 19:22:51.09
nelem(要素数),vec(*int)をメンバに持ち、コンストラクタでnew int[nelem]によって
int型の配列を実現するクラスIntArrayがあり
C++で自己初期化(IntArray x = x)を抑制するコピーコンストラクタを作ろうとしました
自己初期化の問題は、左辺のIntArray xの宣言子よりxは生成されるので
右辺のxはコンパイルエラーにならないが、この右辺xは未初期化(デフォルトコンストラクタにもかからない)なので
結果としてxのメンバが不定値で設定されてしまうことにあるということです
IntArray x=x;はダメだが、
IntArray t;// default constructor
x=t; //IntArray::operator=が定義済み。
にするとうまくいく。そこで、下のようにコピーコンストラクタを定義しました
IntArray::IntArray(const IntArray& x){
if(&x != this){ /*自己初期化ではない*/
nelem = x.nelem;
vec = new int[nelem];
for(int i=0;i<nelem;i++)
vec[i] = x.vec[i];
}
else{
std::cout << "※自己初期化が行われています。\n";
IntArray t;
*this = t;
}
}
するとコンパイルエラーは出ないものの実行すると
*** glibc detected *** ./a.out: free(): invalid pointer: 0xb763bff4 ***
となり、どこかでメモリの開放がうまくできていないのかプログラムが強制終了してしまいます。
前後左右でチェックして明らかに*this = t;に問題があります。
~IntArray() { delete[] vec; }がデストラクタです。
コードの中にどこか問題のある記述ありますでしょうか?
49:48
12/03/25 19:34:53.85
長文をかいといてすいません。
下のようにやるとうまくいきました(単純に考えうることなのに頭が回ってませんでした)
IntArray::IntArray(const IntArray& x){
if(&x != this){
・・・・
}
else{
std::cout << "自己初期化が行われています。\n";
IntArray t;
nelem = t.nelem;
vec = new int[nelem];
for(int i=0;i<nelem;i++)
vec[i] = t.vec[i];
}
}
原因が下のoperator=の自己代入抑制のコード中のdeleteで、既存の配列を開放するため
>>48のコピーコンストラクタ中のthis->vecが不定値の状態でdeleteを行っているからでした。
IntArray t; Int Array x = t が許されたのは、コピーコンストラクタが呼び出されているからなのですね。
if(this != &x){
if(nelem != x.nelem){
delete[] vec;
nelem=x.nelem;
vec = new int[nelem];
}
for(int i=0;i<nelem;i++)
vec[i] = x.vec[i];
}
お騒がせして勝手に自己解決してすいませんでした
50:デフォルトの名無しさん
12/03/25 19:35:24.20
>>48
そのクラス、コピー代入演算子やデストラクタも定義されてるんだよね?
コピー代入演算子の実装は初期化済みのオブジェクトを期待してるだろうから、
ら未初期化のオブジェクトに対して代入しちゃマズイでしょう。
51:48
12/03/25 19:38:35.35
>>50
まさにそういうことなんですよね・・・
コピーコンストラクタとコピー代入演算子の違いが初めてはっきり分かった気がします。
52:デフォルトの名無しさん
12/03/25 19:38:54.60
うわ、解決してた。
にしても自己初期化に何かしらの動作を与えても呼び出しもとのバグであることに
変わりはないだろうから、心配するとしても assert() ぐらいでいいと思うぜ。
53:デフォルトの名無しさん
12/03/25 19:43:15.84
>呼び出しもとのバグであることに変わりはないだろうから、心配するとしても assert() ぐらいでいいと思う
眼から鱗ですね。確かにその通りです
54:デフォルトの名無しさん
12/03/25 23:37:39.03
独習C言語を読み終わり、乗っていたすべての例題を解けるようにはなりました。
そろそろGUIなプログラムを作ってみたいのですが、次は何を理解すればよいのでしょうか?
55:デフォルトの名無しさん
12/03/25 23:48:43.74
>>54
独習C++
56:デフォルトの名無しさん
12/03/26 00:04:15.47
>>54
プラットフォームや見た目、使い勝手などから、
目的に合いそうなGUIツールキットを探す
57:デフォルトの名無しさん
12/03/26 03:50:29.17
>>54 作りたいものに応じた開発言語・ライブラリ選択基準
58:デフォルトの名無しさん
12/03/26 04:37:34.80
ふと自作クラスを作っているとき疑問に思ったのだが
C++の既存のWin32ライブラリ、例えばMFCとかATL/WTLは
BOOL型とbool型が混在しているが、メソッドの戻り値の型を例に取ると
どういう場合はBOOL型にし、またはbool型にすべきなのだろう?
59:デフォルトの名無しさん
12/03/26 04:55:41.62
>>58
自分で作るならbool、APIの戻り値をそのまま戻すなら(必要に応じて)BOOL。
ちなみに、Win32APIのBOOLは二値じゃない。
60:デフォルトの名無しさん
12/03/26 05:49:34.50
>>59
MFCなどはAPIとの整合性を重視してBOOLを使うのだろうか?
C++のライブラリであるなら言語仕様にあるboolを使うべきと思うのだが、
boolを使うデメリットがあるのでしょうか?
シリアル化の場面ぐらいしか思い浮かばないが…
61:デフォルトの名無しさん
12/03/26 07:21:25.04
Win32API 使う人の中じゃ有名だろうが、
GetMessageという関数があって、こいつはBOOL型を返すくせに、
-1、0、それ以外の値の3種類がある
そういう特別な例外だけ気にしておけば bool で構わないと思う
62:デフォルトの名無しさん
12/03/26 10:13:39.23
BOOLを返す関数の戻り値はBOOLで受ければいいお
それからエラー処理でも何でもすればいいんだお
63:デフォルトの名無しさん
12/03/26 11:00:52.23
Windowsデータ型のBOOLはBYTEの別名でBYTEはunsigned charの別名なんだっけか?
64:デフォルトの名無しさん
12/03/26 11:58:50.71
URLリンク(msdn.microsoft.com)
BOOLはint
65:デフォルトの名無しさん
12/03/26 12:01:48.56
>>61
実用上ではboolでキャストしても問題ないとかじゃなくて、
むしろリファレンスにboolで受けるなよ!絶対だぞ!って書かれてるのか(´・ω・`)
66:デフォルトの名無しさん
12/03/26 13:22:12.48
>>64
うは、BOOLとBOOLEANで型が違うw
67:デフォルトの名無しさん
12/03/27 01:19:38.40
以下のフォーマットになるようにバイナリデータ
を作成したいのですが、どうするのが手っ取り早いでしょうか?
[フォーマット]
┌────┬───┬───┬───┬───┐
|2進数桁数(N桁)│ 値A │ 値B │ 値C │ 値D │
└────┴───┴───┴───┴───┘
└ 5 bit ┘└ N bit ┘└ N bit ┘└ N bit ┘└ N bit ┘
フォーマットの先頭にある5ビットで2進数表現の桁数が格納されており、
その後に続く値(符号付)が、桁数に従い2進数で格納されております。
例えば、
桁数:6桁
値A :0
値B :20
値C :0
値D :20
の場合、
00110 000000 010100 000000 010100 になります。
これを先頭から8ビットずつとって(8ビットにならに場合0パディング)、
バイナリに変換して、
0x30 0x0A 0x00 0xA0
というような感じにしたい。
どういうロジックにするのが簡単なのでしょうか?
68:デフォルトの名無しさん
12/03/27 02:14:14.28
>>67
ビットフィールドでググれ
69:デフォルトの名無しさん
12/03/27 02:35:43.19
任意のビット幅のポインタをクラスで作成して使えばよいんじゃね。
operatorとか使うのがよく判らないなら、Read/Write用のメンバ関数を用意してもいいし。
bit幅が64bitを超える場合はちょっと面倒になりそうではあるが。
70:デフォルトの名無しさん
12/03/27 08:18:18.66
>>69
ビット長が5ビットで表現されているんだから64bitを超えるわけないだろ。JK
>>67
で、Nが0だったらどうなんの? Nが8を超えたときも2-4バイトにパディングしていいの?
71:デフォルトの名無しさん
12/03/27 08:20:03.12
あ、違うのか。失敬。
>>67
パディングは最後だけってことね。
>>69
総ビット長が64bitを越えるってことか? だとしても、なんで面倒になるんだ?
72:デフォルトの名無しさん
12/03/27 14:06:49.35
>>67
横からだけど適当に作ってみた
URLリンク(codepad.org)
73:デフォルトの名無しさん
12/03/27 23:45:00.45
>>67-72
返事遅くなり申し訳ございませn。
レスありがとうございました。
>>68
ビットフィールドを調べました。
確かに便利だと思いましたが、ビット長が可変なので
使えないのかと思いました。
>>72
サンプルありがとうございます。
こんなに少ないロジックでできるんですね。
ただ、理解があまり出来ておりません
・数個ある条件式の意味
・変数maskが何故こうしてやればいいのか。
※ヘタレですません。
自分は必死こいて、ビットシフトやら、ビットマスクなどを
駆使してベタベタにコード書いてやっとできたんですけど、
72さんのサンプルを参考につくり治したいと思います。
74:デフォルトの名無しさん
12/03/28 09:02:31.82
他のスレッドを実行しているCPU番号を取得するAPIはありませんか?
GetCurrentProcessorNumberで自分のスレッドのCPU番号は調べられますが
他のスレッドのCPU番号はどうすればよいですか?
対象のスレッドは自分のコードではありません。
できればXPでも実現できる方法が知りたいです。
75:デフォルトの名無しさん
12/03/28 09:04:33.89
URLリンク(d.hatena.ne.jp)
アセンブラ使えばできるらしい
76:デフォルトの名無しさん
12/03/28 12:37:20.36
その記事には行き着いたのですが、
他のスレッドからそれを実行しても意味がないと思うのです。
77:デフォルトの名無しさん
12/03/28 14:05:41.14
そんなもん取得して何がしたいのか
78:デフォルトの名無しさん
12/03/28 14:10:32.52
>>67 をbitset使って書いたらキショくなったでござる
URLリンク(ideone.com)
79:営利利用に関するLR審議中@詳細は自治スレへ
12/03/29 13:02:41.54
他の関数に ジャンプ できますか?
80: ◆QZaw55cn4c
12/03/30 05:09:54.89
>>79
制限付でsetjmp()/longjmp
81:営利利用に関するLR審議中@詳細は自治スレへ
12/03/31 00:26:51.70
2種類の全く異なるクラスがそれぞれのポインタを利用してtree状に循環参照する時に
ヘッダファイルの定義はいったいどう記述すればいいのですかね
一度だけコンパイラに参照されると片方でしか定義されないことになってしまってエラーになる
ヘッダだけでvoid*型にしてcppファイルで形指定して参照するくらいしか思い浮かばないけどダサすぎる
82:営利利用に関するLR審議中@詳細は自治スレへ
12/03/31 00:29:47.58
クラス名だけ書いておけばいいって話ではなく?
83:81
12/03/31 00:50:38.47
すまん、出来ればhファイルだけで完結させたくて
関数のスクリプトも全部hファイルに記述しようとしてるんだけど
名前を入れるだけではnewの部分で形が認識できないとエラーになる
84:営利利用に関するLR審議中@詳細は自治スレへ
12/03/31 00:52:47.84
inline CLASS::func(){} を知らないて話し?
85:営利利用に関するLR審議中@詳細は自治スレへ
12/03/31 01:04:26.86
んーなんかなにがやりたいかよくわからんね
エラーの出る最小コードとか作れない?
86:片山博文MZボット ◆0lBZNi.Q7evd
12/03/31 14:18:41.39
RubyスクリプトをC言語に翻訳することできますか?
87:片山博文MZボット ◆0lBZNi.Q7evd
12/03/31 14:19:49.58
>>81 >>83 ポインタのみ必要なら、class HOGEHOGE; って書いておけば?
88:片山博文MZボット ◆0lBZNi.Q7evd
12/03/31 14:24:24.01
class HOGE1;
class HOGE2;
class HOGE1 { ... HOGE2* getHoge2(); ... };
class HOGE2 { ... HOGE1* getHoge1(); ... };
inline HOGE2* HOGE1::getHoge2() { return new HOGE2; }
89:営利利用に関するLR審議中@詳細は自治スレへ
12/03/31 16:06:16.23
個人的にはツリーのノードにあたる部分のインターフェイスを定義してから
両方のクラスはそのインターフェイスを継承して作るのがいいんじゃないかと思うがどうか
90:営利利用に関するLR審議中@詳細は自治スレへ
12/03/31 23:48:24.66
VC++10のdebugビルドにおいてSTLのiteratorが有効か無効かどうかチェックが入るみたいなのですが、
これが障害となりboost::rangeにおけるemptyメンバやsizeメンバが使用できません。
原因は各種オペレーターオーバーロード時の動作に際して上述したチェックが入り、dereferenceできない内容ならばassertしてしまうからです。
これにより初期状態(例えば内部表現がnullptrのiterator)かどうかの判定ができません。
releaseビルドではチェックが入らないため問題なく扱えるのですが、どうしたら良いのでしょうか?
91:81
12/04/01 02:47:59.43
>>87
new するってことはデフォルトコンストラクタが必要
>>89
継承しても問題の根本が解決するわけじゃない
a.h
#pragma once
class a
{
public:
a(){}
make_b(){new b();}
}
b.h
#pragma once
class b
{
public:
b(){}
make_a(){new a();}
}
と言った具合にcやcppを使わずJavaのようにhファイルのみでクラスを実装しようとした時に
双方向で参照可能にするようなコンパイラの定義方法が存在しないので困ってる
92:営利利用に関するLR審議中@詳細は自治スレへ
12/04/01 03:11:13.67
cppに定義かけ
c++じゃそれが普通だ
93:営利利用に関するLR審議中@詳細は自治スレへ
12/04/01 03:13:11.61
>>91
a.h,b.hをまとめてab.hに書く
普通はcppに書くけどね
94:営利利用に関するLR審議中@詳細は自治スレへ
12/04/01 08:48:02.88
>>93
テンプレートでなら見たことがあるな、そういう書き方。
普段からC/C++に触ってるわけじゃないので、今でもやるのかどうかは知らないけど。
95:営利利用に関するLR審議中@詳細は自治スレへ
12/04/01 11:17:11.93
いくら初心者でもそのコードはひどい…
あとC++とJavaは単に文法が似ているだけで中身全く別の言語なんで
"Javaのように"できることはほとんどないと思ったほうがいい
むしろ危険
96:営利利用に関するLR審議中@詳細は自治スレへ
12/04/01 17:59:11.24
質問させてください。
環境:Windows7 32bit , Visual Studio 2005
fopen("r+")で取得したファイルポインタに書き込む際、
"w"で開いたかのように書き込む(内容をすべて上書きする)方法はありますか?
97:営利利用に関するLR審議中@詳細は自治スレへ
12/04/01 18:27:13.37
_chsize()または_chsize_s()
98:営利利用に関するLR審議中@詳細は自治スレへ
12/04/01 19:16:45.57
>>97
ありがとうございます!
99:営利利用に関するLR審議中@詳細は自治スレへ
12/04/02 02:02:15.72
>>91
なんでそんな上から目線なの?
もうbをaの内部クラスにしちまえよ
100:営利利用に関するLR審議中@詳細は自治スレへ
12/04/02 10:28:15.11
vc10で銀行丸めの関数を作りたいのですが
単純に実装すると、負かどうかや、小数部がちょうど0.5のとき
など分岐だらけになってしまいます。
分岐のない高速なアルゴリズムを教えていただけませんか?
101:営利利用に関するLR審議中@詳細は自治スレへ
12/04/02 10:48:00.45
分岐なしじゃ無理
102:営利利用に関するLR審議中@詳細は自治スレへ
12/04/02 11:09:16.62
その程度なら十分に高速そうだしなー
103:営利利用に関するLR審議中@詳細は自治スレへ
12/04/02 11:38:21.93
>>100
適当に楽に作れ。
あとでそこがボトルネッが判明してから手を出す。
104:営利利用に関するLR審議中@詳細は自治スレへ
12/04/02 13:38:52.92
>>100
cmov使ってみたら?
用途は違うけど分岐なくそうと思って昔SSEで書いたことがあるんだけど
そのときはSSEレジスタへのロード&ストアが遅すぎて敗北した
ぜひ試してみて結果を教えてほしい
105:営利利用に関するLR審議中@詳細は自治スレへ
12/04/04 22:57:35.42
>>hファイルのみでクラスを実装しようとした時に
この前提がありえないからその悩み自体ゴミだ
106:営利利用に関するLR審議中@詳細は自治スレへ
12/04/04 23:18:05.81
メンバメソッドの規模をワンライナーに限定して使役関数はクラス外部に置けば有り得ない話じゃないな
内部構造と実装コードの癒着が少なくなる方向付けも出来るし
107:営利利用に関するLR審議中@詳細は自治スレへ
12/04/04 23:30:14.72
テンプレートならむしろヘッダファイルに書くのが普通
108:営利利用に関するLR審議中@詳細は自治スレへ
12/04/05 01:07:24.50
それって古いVCのテンプレート周りのバグ対策じゃね?
109:営利利用に関するLR審議中@詳細は自治スレへ
12/04/05 07:22:15.00
んなこたない
勉強すれ
110:営利利用に関するLR審議中@詳細は自治スレへ
12/04/05 10:07:30.06
いまだにヘッダにロジック書くバカがいるのかよ
111:営利利用に関するLR審議中@詳細は自治スレへ
12/04/05 12:38:32.98
テンプレートはしょうがねーべ。
あんまりロジック部分を別の翻訳単位に分離すると
コンパイル時間が爆発的に大きくなるから。
どっかのブログで理論値と実測結果の両方を示して
「テンプレートは全部一つの翻訳単位に埋め込むと超速^^」
みたいなおもしろい結論(ただし上司に殺される)を出してなかったっけか
112:営利利用に関するLR審議中@詳細は自治スレへ
12/04/05 15:35:16.49
>>100
boostにあるんじゃね?
113:営利利用に関するLR審議中@詳細は自治スレへ
12/04/05 21:22:45.05
テンプレートはコンパイラから実装が見えないと実体化できないので、通常はヘッダに実装を書く
文法上はこの制限を回避するexportキーワードってのもあるが
現実はほとんどのコンパイラが実装してなかったし、C++11では削除された
boostなんて全部ヘッダにロジック書いてる
114:営利利用に関するLR審議中@詳細は自治スレへ
12/04/05 22:39:46.72
C、C++、Windows API でファイル入出力など同じような関数がありますが
使い分ける基準などあるのでしょうか?
115:営利利用に関するLR審議中@詳細は自治スレへ
12/04/05 22:40:51.20
自分が使いやすいの使えばいい
116:営利利用に関するLR審議中@詳細は自治スレへ
12/04/05 23:20:31.03
Visual C++とかGCCを使っている限りは
Windows API使わないとUnicode入出力できんぞ。
(正確には、「できるがめんどい」・3・)
117:営利利用に関するLR審議中@詳細は自治スレへ
12/04/05 23:48:25.94
>>114
自分に必要な機能を持ってるものを選ぶ
機能的にどれでも要件を満たしているなら、使い勝手、パフォーマンス、移植性等を
考慮して自分にとってメリットの大きいものを選ぶ
ただしWindowsの入出力ではUnicodeファイル名やラージファイル等をサポートしたい
場合、移植性はどのみち犠牲になってくるが
ファイル入出力に関して言えば、例えばAPIでファイルを開いた後
_open_osfhandle() -> _fdopen()
でファイルポインタを得てstdioを使う、といった複合技も可能だよ
118:114
12/04/06 00:12:50.72
>>115-117
返答ありがとうございます、まだ単純なファイル操作しかわかりませんが
それぞれ区別が付くように調べてみます
119:デフォルトの名無しさん
12/04/12 10:23:09.39
gccの-Sオプションで吐かれるファイルにCのソースコードを埋め込むオプションはありますか?
VC++でいう/FAsのようなものがほしいのですが
120:デフォルトの名無しさん
12/04/12 10:52:43.45
>>119 gcc -Wa,-adlh -g -c
121:デフォルトの名無しさん
12/04/12 21:26:46.42
ツリービューにイメージリストをセットすると、使用後イメージリストを削除する必要があるようです
リストビューにイメージリストをセットすると、リストビューが勝手に削除してくれるようです
拡張コンボボックスのイメージリストは削除されるのでしょうか?
また、仮にリソースリークしてもアプリケーションが終了すれば問題ないのでしょうか?教えてください
122:デフォルトの名無しさん
12/04/13 01:53:33.31
>>120
ありがとうございます
やりたかったことはまさにこれで、FreeBSD上ではうまく動きました
が、Windows上のh8300-elf-gccではエラーがでてうまく逝きませんでした(´・ω・`)
もうちょっと調べてみます
123:デフォルトの名無しさん
12/04/13 22:36:29.92
どす窓のプログラムを書きたいのですが、
普段は別の処理をしていて、キーボードから入力があったときのみにそれに対して反応させるにはどうすればよいのでしょう?
124:デフォルトの名無しさん
12/04/13 22:51:23.67
別の処理の内容次第
125:123
12/04/13 22:55:26.44
>>124
入門書を読み終えたので、STGでも作ってみようかと思ったのですが、どうしても入力待ちで停止してしまいます。
なにか良い方法はないでしょうか?
126:デフォルトの名無しさん
12/04/13 22:57:57.11
標準関数だけで 何も押されてないということもわかる入力監視ってできるのかな?
(getchar() は 入力があるまで止まるよね)
非標準関数なら環境によって色々あるだろうけど
127:デフォルトの名無しさん
12/04/13 22:59:49.04
止まってることがそういうこと
128:デフォルトの名無しさん
12/04/13 23:04:42.46
kbhit()は?
129:デフォルトの名無しさん
12/04/13 23:06:15.27
検索していたらkbhitというものがあるようですね
こいつを試してみます
130:デフォルトの名無しさん
12/04/13 23:07:02.09
>>128
書き込む前に更新するの忘れてました
kbhitで試してみます
ありがとうございました
131:デフォルトの名無しさん
12/04/13 23:11:46.73
CUIなのか。
curses使え
132:デフォルトの名無しさん
12/04/15 01:22:10.10
autoconfで configure/make するようなソフトウェアを、Visual C++の cl.exe でビルドすることって出来る?
133:デフォルトの名無しさん
12/04/15 11:41:23.86
>>132
ものによるけど、VCでビルドすることを考えているものは、大体ビルド手段を
提供しているから、それがないものは簡単にはいかないと思った方がいい
やって出来なくないものもあったけど、ソースの書き換えが必要だったり、
ビルドされる流れを理解する必要があったり、関連ライブラリの移植が必要だったりと、
かなり労力がかかったよ
134:デフォルトの名無しさん
12/04/17 18:32:12.77
どうしてテンプレートというものが出来たのでしょうか?
せっかく型に厳密だったのに台無しじゃないですか?
135:デフォルトの名無しさん
12/04/17 18:53:32.49
>>132
MinGWで簡単にビルドできて(依存性が少ない)、かつC99で書かれていないなら
比較的容易にMSVC対応できる可能性は高い
MinGWでもビルドが面倒くさかったりMinGWでもビルドできなかったりC99で
書かれているものは基本的に茨の道だが、これも難易度はケースバイケース
Unixのシステムコールが使われているようなものでも、ある程度簡単に移植可能な
ものもあるが、fork()あたりが使われているとそうはいかない
136:デフォルトの名無しさん
12/04/17 18:55:17.02
ああそうそう、C99もだがgcc拡張(gcc形式でのインラインアセンブラも含む)
なんかもダメよ
まあ細かい話だけど
137:デフォルトの名無しさん
12/04/17 21:11:26.93
>>134
複数の型に対応できるだけであって、厳密なのは大して変わらなくね?
138:デフォルトの名無しさん
12/04/17 21:16:56.68
テンプレートこそ型に厳密だよな
139:デフォルトの名無しさん
12/04/17 22:01:52.37
>>134 は一体何を言っているんだ
140: ◆QZaw55cn4c
12/04/17 22:03:09.58
qsort() をみよ。void * は事実上なんでもあり。
141:デフォルトの名無しさん
12/04/18 03:27:26.98
しかも何気ないCスタイルキャストでreinterpret_castとconst_cast を一気にやるとか凶悪な使い方が横行する。
142:デフォルトの名無しさん
12/04/18 07:56:28.43
#define const_cast Dont_use_constcast
とかやりたくなるな…
143:デフォルトの名無しさん
12/04/18 12:10:36.84
C++は無理が多いな
144:デフォルトの名無しさん
12/04/18 12:15:06.88
するべきでないことが
やりづらくなっているのはいいことだ
145:デフォルトの名無しさん
12/04/18 22:05:07.60
最近C++始めたんだがどうやって覚えていけばいいのかわからない
146:デフォルトの名無しさん
12/04/18 23:38:42.82
>>145
まずはCを始めます。
次に、C++の入門書を読みます。
\(^o^)/
147:デフォルトの名無しさん
12/04/19 21:49:25.06
>>146
C++の得意分野というか、C++を習うとどんなことができるのだろうか。
馬鹿なことを聞くなと言われそうだが、プログラミングの腕を磨きたいと
思って。誰か教えてください。以前、C言語とFortran, Perl を
やったことがあります。
148:デフォルトの名無しさん
12/04/19 22:06:11.64
コンテナはなかなか感動する
149:デフォルトの名無しさん
12/04/19 22:52:05.88
>>147
不可能をなくすことができる
150:デフォルトの名無しさん
12/04/20 01:19:38.32
>>147
とりあえず、windowsでGUIをもつソフト作ろうと思うとC++の知識が不可欠らしい。
自分はオブジェクト指向が意味不明で積んだw
151:デフォルトの名無しさん
12/04/20 01:32:31.40
自コード内で多態とオーバーロードとstatic変数とADLさえ巧く避ければイイ言語だよ。
152:デフォルトの名無しさん
12/04/20 08:47:42.14
>>149
>>150
>>151
レスありがとうございました。
まさかレスが返ってくるとは思わなかったのでうれしかったです。
153:デフォルトの名無しさん
12/04/20 21:51:11.70
>>150
windowsのGUIは、api使ってC言語でできる
というか、基本のapiはただの関数なので、C++である必要はない
154:デフォルトの名無しさん
12/04/21 02:57:43.35
リソースの破棄が簡単になったことだな。
155:デフォルトの名無しさん
12/04/21 19:34:54.96
いまC/C++でGUIソフト作るとき何使うのが一般的なんだろう。
win32api勉強してみたが本格的なもの作れる気がしないわ。
156:デフォルトの名無しさん
12/04/21 19:57:54.08
おすすめ
fox
SDL
C#
GTK
HSP
C++でないものをあるが、メインはC++DLLで作って呼び出せばいい・。
157:デフォルトの名無しさん
12/04/21 20:14:00.67
>>156
ありがとう
FOXとSDLは初めて聞いたなぁ
158:デフォルトの名無しさん
12/04/21 22:58:28.93
Qtでいいじゃん
159:デフォルトの名無しさん
12/04/22 00:40:09.41
>>155
環境や目的によって変わってくるので
一通り使って消去法で選ぶのがいいと思うよ
マルチスレッド対応なGUIツールキット欲しいわぁ
160:デフォルトの名無しさん
12/04/22 01:58:03.13
マルチスレッド対応GUIツールキットってどういう意味?
マルチスレッド機能とGUIが一緒についてくるってだけ?
161:デフォルトの名無しさん
12/04/22 16:22:53.86
GUI本体はイベントドリブンだな。
162:デフォルトの名無しさん
12/04/22 16:30:56.36
C++でメモリの再確保ってどうやればいいんでしょうか?
163:デフォルトの名無しさん
12/04/22 17:01:33.35
使いまわせばいい
164:デフォルトの名無しさん
12/04/22 17:11:29.74
>>162
コンテナに要素を追加するとか realloc() を呼び出すとか
165:デフォルトの名無しさん
12/04/22 17:31:08.80
>>164
ありがとうございます。
C++ではmallocはあまり使わないと書いてあったのですが
再確保の場合コンテナを使うのが一般的なのでしょうか?
166:デフォルトの名無しさん
12/04/22 17:35:42.22
>>165
そもそも「再確保」を目的にすることが無い。
どうせコンテナの要素を動的に増やしたいんだろ。
標準ライブラリを使って素直なコードを書けばいい。
167:名無しさん
12/04/23 15:05:45.62
検索エンジン→心の病→西東京バス事件
168:デフォルトの名無しさん
12/04/23 23:27:17.12
>>160
擬似コード書くと
subthread() {
App().MainLoop(Form())
}
これがまともに動くもの。
169:デフォルトの名無しさん
12/04/24 01:28:50.39
Windowsで別のプロセスに属する2つのウインドウの上下関係を設定することはできますか?
> SetParent 関数を使うと、ポップアップウィンドウ、オーバーラップウィンドウ、子ウィンドウの親ウィンドウを設定できます。新しい親ウィンドウと子ウィンドウは、同一アプリケーションに属していなければなりません。
ということらしいのですが・・・
なければイベントを捕まえて上下関係を設定しなおすことも考えているのですがちらつきそうで
170:デフォルトの名無しさん
12/04/24 01:43:22.31
>>169
スレ違い
171:デフォルトの名無しさん
12/04/24 06:38:02.17
宿題で出されたこの問題が分からないのですが、誰か教えてくれませんか。
1~9までの連続する数字の間に和・差・積の演算子(+, -, *)を適当に入れて、
式の値がちょうど 100 となる例を挙げよ(10とおりだけ書け)。
たとえば、
1 + 2 * 3 * 4 * 5 + 6 * 7 - 8 * 9 = 91
というような計算をする。ただし、この例では式の値が91となるので答えではない。
172:デフォルトの名無しさん
12/04/24 06:39:48.93
プログラム関係ないじゃん
173:デフォルトの名無しさん
12/04/24 10:38:37.42
>>171
C/C++の宿題片付けます 156代目
スレリンク(tech板)
291 :デフォルトの名無しさん:2012/02/16(木) 07:29:17.20
[1] 授業単元:知識と推論
[2] 問題文 探索によってパズルを解くプログラムを作成せよ(小町算)
[3] 環境
[3.1] OS: Windows7
[3.2] コンパイラ名とバージョン: VisualStudio2010
[3.3] 言語: C言語
[4] 期限: 2/16
よろしくおねがいします><
292 :デフォルトの名無しさん:2012/02/16(木) 08:52:44.46
>>291
小町算には変形ルールのやつもあるけど、
「1□2□3□4□5□6□7□8□9 = 100 という数式の□の中に、+,-,×,÷,空白 のいずれかを一つずつ入れる」でいいのかな?
URLリンク(ja.wikipedia.org)
293 :デフォルトの名無しさん:2012/02/16(木) 12:34:14.04
>>291
空白なし、*優先、/で小数部切り捨てなら↓
URLリンク(ideone.com)
174:デフォルトの名無しさん
12/04/24 13:51:56.91
>>170
これは失礼
175:デフォルトの名無しさん
12/04/24 23:00:53.38
Win32質問箱に投稿したのと同じ質問ですが、
あちらは機能していないようなのでこちらで改めてお尋ねします。。
VS2010でWTLベースのアプリを作成しているのですが、ウィンドウ上でマウスポインタを
移動しているとき、Ctrlキーが押されている間だけポインタを変更したいのです。
しかし、クライアント領域内でポインタを動かすだけではWM_SETCURSOR メッセージが
送られず、ポインタを変更できません。
任意のタイミングでポインタを変更する方法はないでしょうか。
176:デフォルトの名無しさん
12/04/24 23:03:58.28
SetCursorってまんまのがあるじゃない
177:デフォルトの名無しさん
12/04/27 07:42:07.68
iphoneよくわからん
nebulousってアプリでコーディングしてそのままmobileterminalでコンパイルしてんるだけど/nで改行してくれない
さすが文鎮
178:デフォルトの名無しさん
12/04/27 07:49:48.78
/n
179:デフォルトの名無しさん
12/04/27 07:59:41.41
四時間位四苦八苦してたけどコンパイラとツールチェーンcydiaから再インスコしたら自己解決したわ
180:デフォルトの名無しさん
12/04/28 16:54:19.12
メンバ変数の初期値は0ですか?
181:デフォルトの名無しさん
12/04/28 17:03:16.45
そんなこと無いので初期化しましょう
182:デフォルトの名無しさん
12/04/28 22:24:14.40
仮引数の変数名を書くのと書かないのではパフォーマンスが変わったりしますか?
183:デフォルトの名無しさん
12/04/28 22:44:40.57
変わるわけねーだろ
184:デフォルトの名無しさん
12/04/29 08:50:02.98
えw
185:デフォルトの名無しさん
12/04/29 10:11:23.50
そりゃぁ、書くと書かないとで意味が変わらないコードだったら書かないのと同じだから差は出ないよ。
と言いつつ、>182, >183, >184が三人とも私と違う解釈をしていて話が噛み合っていないだけなんだろうけどね。
186:デフォルトの名無しさん
12/04/29 12:20:18.11
C++でもメンバ変数の初期値は不定なの?
187:デフォルトの名無しさん
12/04/29 12:28:18.78
不定です
188:デフォルトの名無しさん
12/04/29 13:27:32.41
太ぇ野郎だ
189:デフォルトの名無しさん
12/04/29 14:19:30.94
不定っていうけど+にはならないよね。なんでか
190:デフォルトの名無しさん
12/04/29 14:26:13.94
>>189
それ 0xcd とかデバッグ時メモリ未初期化のデフォルト値が入ってるんじゃね
191:デフォルトの名無しさん
12/04/29 15:27:09.55
>>189
フフフフフフフ
192:デフォルトの名無しさん
12/04/30 01:06:03.83
たまに フフフノフフフ になるよ
193:デフォルトの名無しさん
12/04/30 12:24:04.25
ならねーよ
194:デフォルトの名無しさん
12/04/30 12:25:36.33
そうでしたっけ?ウフフ
195:デフォルトの名無しさん
12/04/30 16:12:04.73
漠然とした質問になってしまうが
パーサを作ろうと思っているのだが、何か決まった作り方とかありますか?
デザインパターン的な
196:デフォルトの名無しさん
12/04/30 16:26:53.12
使えるライブラリを選んで使え
197:デフォルトの名無しさん
12/04/30 16:27:32.29
>>195
構文解析器
URLリンク(ja.wikipedia.org)
198:デフォルトの名無しさん
12/04/30 16:43:40.52
>>197
ありがとう
今までホント自己流でやってきたから情報ありがたい
パーサライブラリとかもあるんかな?ぐぐってみる
199:デフォルトの名無しさん
12/05/01 12:28:53.02
構文解析器をゆっくり読むとひみつどうぐ風に聞こえる
200:デフォルトの名無しさん
12/05/02 01:44:51.75
VC拡張か普通の規格かわかりませんがoverrideを強制する方法はありませんか?
class A{
virtual void func(void) = 0;
};
class B : public A{
virtual void func(void) override;
};
のようにoverrideがなければコンパイルエラーにしたいのですが
誰かがvoid A::func(int)のように変更した時にBの変更し忘れを検出したいというのが目的です
201:デフォルトの名無しさん
12/05/02 03:14:58.13
/we 3668
かな
Windows使ってないけど。
202:NAS6 ◆n3AmnVhjwc
12/05/02 16:13:47.90
素数判定プログラム
エラトステネスの櫛とためし割りのハイブリッド
URLリンク(www5b.biglobe.ne.jp)
664579番目の素数検索
通常ルーチンprime4()int型3867ms
私のint型1654ms long long int型5897ms
203:NAS6 ◆n3AmnVhjwc
12/05/02 16:17:06.10
初期化も時間に含めるのか分からん
204:デフォルトの名無しさん
12/05/02 22:33:34.50
篩で高速化すんなら、アトキンの篩ぐらい使えよw
205:NAS6 ◆n3AmnVhjwc
12/05/02 22:55:55.73
アトキン調べてコード見た感じ私の方が速そうですよ
メモリの都合で最大9番目までの素数の乗算の数の
エラトステネスの篩を初期化して倍数掛け
206:NAS6 ◆n3AmnVhjwc
12/05/02 23:11:28.56
逐次篩というやつだった
207:デフォルトの名無しさん
12/05/02 23:13:35.71
素数判定なんて相当研究されてるだろ。
例えばフリーで使える速いやつにかったら研究者になれるレベルだろ。
208:デフォルトの名無しさん
12/05/02 23:16:55.32
>>205
9番目までなら
209:デフォルトの名無しさん
12/05/02 23:27:31.70
AKS素数判定法は、与えられた自然数が素数であるかどうかを決定的多項式時間で判定できる、世界初のアルゴリズムである。
URLリンク(ja.wikipedia.org)
ミラー-ラビン素数判定法は、与えられた数が素数かどうかを判定する素数判定アルゴリズムの一種。
フェルマーの素数判定法や Solovay-Strassen 素数判定法と同じく、乱択アルゴリズムの一種である。
URLリンク(ja.wikipedia.org)
一般数体ふるい法 - Google 検索
URLリンク(www.google.com)
Adleman-Pomerance-Rumely - Google 検索
URLリンク(www.google.com)
暗号理論の研究動向
暗号技術調査室では、最先端の暗号基礎技術研究の動向を調査してきた。 暗号は、もはや軍事目的のみでなく、日常生活に欠かすことの出来ない基礎技術として、 一般消費者が意識するしないに関わらず頻繁に用いられている。
URLリンク(www.ipa.go.jp)
一般数体篩法実装実験(6) : 格子篩
小さな因子を含まない数百ビット以上の合成数に対する素因数分解アルゴリズムとして,数体篩法が現在最も高速と考えられている.
URLリンク(ci.nii.ac.jp)
NTTら、768ビット合成数を一般数体篩法にて完全分解に成功 [2010/01/08]
URLリンク(news.mynavi.jp)
素数判定に使用しているプログラムを紹介します。
URLリンク(www.geocities.jp)
210:デフォルトの名無しさん
12/05/03 01:39:29.76
33,333,333個の素数判定
URLリンク(www.spoj.pl)
211:デフォルトの名無しさん
12/05/03 19:53:47.06
>>201
質問者は確実にC3668などを発生させられるために
overrideの使用を強制したいと言っているように思われる。
俺もあれば使いたいんだけど、見当たらないんだよね……。
212:デフォルトの名無しさん
12/05/03 20:11:40.53
class Aがあるヘッダを読み取り専用にする
213:デフォルトの名無しさん
12/05/04 02:19:06.34
1,2,3,4,5,6,7,8,9,10,11,12,13,...という数列があって、それを
1,2,3,4,1,2,3,4,1,2,3,4,1,...(1,2,3,4の繰り返し)に対応させたいんですが、
IF文とか3項演算子とかを使わずにできますか?
%を使うと1,2,3,0,1,2,3,0になって上手くいきません。
214:デフォルトの名無しさん
12/05/04 02:21:52.91
((n-1)%4)+1
215:デフォルトの名無しさん
12/05/04 02:55:08.02
ありがとうございました。
216:NAS6 ◆n3AmnVhjwc
12/05/04 18:00:53.36
二次篩法を実装したけど
大きな数じゃないと処理が重くて出番がない
217: ◆QZaw55cn4c
12/05/04 18:04:29.39
>>216
大きな素数(メルセンヌ数など)の原始根を求めたいんだが、なんかいい方法はないか?
素数自体は 2^1000 程度、原始根は 2 とか 3 とかじゃなくて、300~500 前後のものがほしいのだが。
218:デフォルトの名無しさん
12/05/04 18:27:33.29
原始根と指数
URLリンク(aozoragakuen.sakura.ne.jp)
219:NAS6 ◆n3AmnVhjwc
12/05/04 18:39:10.94
二次篩法とためし割りでいいんじゃない
220:デフォルトの名無しさん
12/05/04 18:39:56.79
原始根
URLリンク(detail.chiebukuro.yahoo.co.jp)
URLリンク(mailsrv.nara-edu.ac.jp)
URLリンク(detail.chiebukuro.yahoo.co.jp)
URLリンク(www004.upp.so-net.ne.jp)
URLリンク(homepage2.nifty.com)
221:デフォルトの名無しさん
12/05/05 07:00:10.49
ある整数が素数だと分かってなになるんだ?
222:デフォルトの名無しさん
12/05/05 07:04:55.38
わかる仮定が大事
あと暗号で素数を利用してるケースが多々あるとか
223:デフォルトの名無しさん
12/05/05 07:31:43.91
そういう意味じゃなくて・・・
その手の話は、コンピュータサイエンスやってる科学者だろ
アプリケーションを作成するようなレベルで素数なんて使うか?
224:デフォルトの名無しさん
12/05/05 09:15:25.97
実用的な使い方ではないけど、DHの理論が成立することを確認するとか?
225: ◆QZaw55cn4c
12/05/05 10:31:37.03
>>224
ピンポン!原始根って虱潰ししかないのでしょうかね。 2^30 くらいで青息吐息
226:デフォルトの名無しさん
12/05/05 13:00:54.54
素数を使ったモジュラアルゴリズムは山ほどあるだろ。
有限体F_pにおいてFFT乗算を用いるのに使ったり、
環Rがベースとなる多項式R[x]のgcdを高速に求めたり(このプロセスは先に述べた高速算術に必要になる)。
特に後者は、古典的アルゴリズムを使った時の中間結果の有理数の分子及び分母が膨大な数になるのを防ぐために、
一度n in R[x]/<p>で計算を行った後にnをR[x]の元に復元する方法がある。
227:デフォルトの名無しさん
12/05/05 13:19:52.59
mod19の原始根をすべて求めよという問題があるのですがひとつひとつ表を埋めていく... - Yahoo!知恵袋
URLリンク(detail.chiebukuro.yahoo.co.jp)
228:デフォルトの名無しさん
12/05/05 13:23:43.62
一個原始根を見つければ、あとは低計算量ですべて出せるはず(証明はしらんが簡単だろう)で
小さいやつから平方剰余の相互則を使って判定しろということ。
素数判定のように高度な知識はいらんだろ。初等整数論だろ。
229:デフォルトの名無しさん
12/05/05 13:30:48.88
それほど面倒でも無いでしょ
xxxxxxx0
xxxxx101
xxxx1001
xxx10001
10000001
下桁に0が並ぶ数字は全部除外できるんだから
230:デフォルトの名無しさん
12/05/05 15:30:26.07
>>227のやり方で、たとえばp = 123456789の原始根をやってみようとしたが、
(素数かは知らないが)もしpが素数だとしてp-1の素因数分解が必要となり実質的には素数判定より手間掛かるな。
231:デフォルトの名無しさん
12/05/05 15:44:17.44
一般数体篩法のオープンソース GGNFS
素因数分解には試し割り法, モンテカルロ法, 楕円曲線法, 二次篩法など多数のアルゴリズムが存在するが,その中でも一般数体篩法は100 桁以上の数を分解するには現在知られる最速のアルゴリズムである.
2005年には 200桁の数(rsa200)が一般数体篩法で分解された.本研究では,オープンソースの一般数体篩法ソフトウェアGGNFSについて,性能測定を行なう.
URLリンク(cryptology.cocolog-nifty.com)
ここでは、素因数分解のための各種アルゴリズムについて解説する。対象は、以下のとおり。
Brute force method
ρ method(Pollard, Brent)
p-1 method
p+1 method
連分数法
複数多項式二次ふるい法
楕円曲線法
URLリンク(www.asahi-net.or.jp)
まず、素因数分解のためのプログラムを入手する必要がある。
Windows PC 上で動作する主なものとしては、
factor (Windows (DOSプロンプト))
ppmpqs (Windows (DOSプロンプト), Linux)
UBASIC (Windows (DOSプロンプト))
SNFS (Windows (DOSプロンプト)) 等がある。
URLリンク(www.asahi-net.or.jp)
分解するにあたっての方針(戦略)について
まず、速いマシンを長時間利用できる場合、90桁以下の数をppmpqsで分解することを薦める。これは、時間さえかければ、確実に分解できるというメリットがある。
マシンがそれ程速くない場合、途中で中断しなければならない場合、90桁以上の数を対象とする場合は、GMP-ECMを使うことを薦める。
URLリンク(www.asahi-net.or.jp)
232:デフォルトの名無しさん
12/05/05 15:51:46.64
GGNFSはNFS法(the Number Field Sieve method; 数体ふるい法)を用いる素因数分解プログラムです。
SNFS法(the Special Number Field Sieve method; 特殊数体ふるい法)と
GNFS法(the General Number Field Sieve method; 一般数体ふるい法)の両方に対応しています。
URLリンク(homepage2.nifty.com)
GMP-ECMはECM(Elliptic Curve Method; 楕円曲線法)を用いる標準的な素因数分解プログラムです(オプションでP-1法やP+1法も選択できます)。
小さな素因数を手早く抽出することができるので、SIQS法やNFS法の前処理として、
あるいはSIQS法やNFS法を適用するには大きすぎる合成数を分解したいときに利用されています。
URLリンク(homepage2.nifty.com)
Msieve は MPQS 法 (the self-initializing Multiple Polynomial Quadratic Sieve; 自己初期化複数多項式二次ふるい法) と
GNFS 法 (the General Number Field Sieve; 一般数体ふるい法) を用いる素因数分解プログラムです。
前処理として P-1 法、P+1 法、ECM (Elliptic Curve Method; 楕円曲線法) なども実装しており、さまざまな数に柔軟に対応します。
URLリンク(homepage2.nifty.com)
GGNFS - A Number Field Sieve implementation
URLリンク(www.math.ttu.edu)
一般数体ふるい法 ソース - Google 検索
URLリンク(www.google.com)
233:デフォルトの名無しさん
12/05/05 16:04:39.12
素因数分解にかかるコストより、p-1乗まで計算した方が良いんじゃないかと思ったが。
空のループでも2^31くらいやったら相当時間かかるだろうから、やっぱ素因数分解からだな。
234:デフォルトの名無しさん
12/05/05 16:06:29.11
◆QZaw55cn4c は、上のライブラリを組み合わせて、原始根出力プログラムを完成してくれ。
235:デフォルトの名無しさん
12/05/05 16:12:08.31
ρ Method (ρ法)
基本的にはモンテカルロ法であり、算出される因数はN,pの大きさには無関係であるが、
経験的には10桁以下程度の大きさの因数pを算出することが多いため、素因数分解の初期フェーズとして使われることが多い。
P-1 method(P-1法)
数学的にはフェルマーの小定理を根拠としており、最も理解しやすいアルゴリズムである。
算出される因数pに対し、p-1が小さい素因数の積で構成されているものを対象とするため、
20桁以下ぐらいの素因数pの算出が可能であり、値によってはもっと大きな素因数も算出されることがある。
ρ法の次のフェーズとして、20桁程度までの素因数をたたき出す時に使用することが多い。
Elliptic Curve Method (楕円曲線法)
数学的には、楕円曲線 y2=x3+ax+b 上の有理点が、mod N で考えた場合のある演算に対してアーベル群を作るため、
Nよりも小さい位数で0(mod N)となる場合があり、その時の位数mとNのgcd をとることにより、Nの素因数を算出する方法である。
複数多項式2次ふるい法で分解できない桁数の数に対して用いる。30桁以下程度の素因数を算出する。
Multiple Polynomial Quardratic Sieve(複数多項式2次ふるい法)
数学的には、フェルマーの方法の拡張版であり、
x2-y2≡0(mod N) の解を多数構成し、求める。
ある桁数以下の数を確実に分解するため、小さい数についての素因数を求める場合、
または、p-1法、楕円曲線法で小さい因数は出しきったと思われる数について、完全分解を求めたい時に適用する。
Number Field Sieve(数体ふるい法)
2005年頃から、プログラムが公開されるようになった。
一般の数に関して、100桁を越えると、複数多項式2次ふるい法で分解するよりも、一般数体ふるい法でやった方が速い。
また、分解対象の数が、係数の小さい6次以下の多項式で表現できる場合、
特殊数体ふるい法が絶大な威力を発揮し、Pentium 4 マシンで、 160桁ぐらいまでの分解が可能である。
URLリンク(www.asahi-net.or.jp)
236:デフォルトの名無しさん
12/05/05 19:21:28.28
Cの質問です
SFMTで作った64bitのunsigned longの乱数があります
これを1bitずつ上位ビットor下位ビットから
array[0] = 1;
array[1] = 0;
・
・
・
というように64個の配列(intでもboolでも何でもOK)に入れたいんですが、どう書けばいいでしょうか
最終的に、ループで回して0と1の行列は長い(数千万の)配列にしたいので
速いコードだとありがたいです
237:デフォルトの名無しさん
12/05/05 19:58:50.80
unsigned long r64;//random
for(int i = 0 ; i < 64 ; i++)
{
array[i] = (r64>>i)&0x01;
}
238:デフォルトの名無しさん
12/05/05 20:07:44.12
>>236
そんな効率の悪そうなことをするためのコードが速くて本当に何か意味があるのかね?
239: ◆QZaw55cn4c
12/05/05 20:21:03.06
今求めているのは、
素数かどうか不明のものを素因数分解すること
ではなく
既知の巨大素数の原始根を求めること
なのですが?
うーん。全然わからん。
240:デフォルトの名無しさん
12/05/05 20:37:55.62
既知の分なら求めず表にするれ
241:デフォルトの名無しさん
12/05/05 20:43:25.15
>>239
これ。
mod19の原始根をすべて求めよという問題があるのですがひとつひとつ表を埋めていく... - Yahoo!知恵袋
URLリンク(detail.chiebukuro.yahoo.co.jp)
242:デフォルトの名無しさん
12/05/05 20:59:34.72
mod p での一般的な原始元を見つける方法
1.平方剰余の性質を使って平方非剰余の根aをみつけます。2.aが原始元でない場合は平方剰余の根bをaに掛けa×bを計算します。
mod p ではp-1と互いに素となる原始根のべき乗となるものを探すわけです。
mod 63823の原始元の求め方
第2補充法則 (2/p)=(-1)^((p^2)-1)/8) より(-1)^((63823^2)-1)/8)=1 で2は平方剰余
(q/p)(p/q)=(-1)^( ((q-1)/2)×((p-1)/2) )を利用して、(3/63823)(63823/3)=(3/63823)(1/3)=-1 なので、3は平方非剰余
p-1=63823-1=2×3×11×967
3^(2×11×967)=16721 で3次剰余ではない。3^(2×3×967)=28107 で11次剰余ではない。3^(2×3×11)=40828 で967次剰余ではない。
したがって3は原始根
URLリンク(detail.chiebukuro.yahoo.co.jp)
平方剰余の相互法則 - Wikipedia
a と p とが互いに素であるとき、合同式
URLリンク(upload.wikimedia.org)
が解を持てば、 a は p を法として平方剰余であるといい、そうでないとき平方非剰余であるという。
(p, a) を a と p の最大公約数とするとき、次の記号
URLリンク(upload.wikimedia.org)
を、アドリアン=マリ・ルジャンドルにちなんでルジャンドル記号と呼ぶ。
[編集] 相互法則平方剰余の相互法則は整数 a が奇素数 p を法として平方剰余であるか否かを見いだす法則である。
p, q を相異なる奇素数とするときに、
URLリンク(upload.wikimedia.org)
が成り立つ。
また、このほかに以下の第1補充法則、第2補充法則が知られている。
第1補充法則:
URLリンク(upload.wikimedia.org)
第2補充法則:
URLリンク(upload.wikimedia.org)
またpとa、bが素であれば、
URLリンク(upload.wikimedia.org)
243:デフォルトの名無しさん
12/05/05 21:05:39.49
原始根を見つけるのに平方剰余の相互法則を使うのは定番らしい。証明説明。
URLリンク(nakano.math.gakushuin.ac.jp)
URLリンク(aozoragakuen.sakura.ne.jp)
URLリンク(www.geocities.jp)
URLリンク(pisan-dub.jp)
URLリンク(www004.upp.so-net.ne.jp)
244:デフォルトの名無しさん
12/05/05 21:11:13.23
>>236
>>237のを使うぐらいしかないんじゃない?
それかいちいち計算せずに、関数を用意しておくとか?
int get_bit(ulong r64)
{
return (r64>>i)&0x01;
}
おそらく>>236のしようとしていることは非効率的で、
オリコウでない方法だと思うよ。
245:デフォルトの名無しさん
12/05/05 21:21:22.96
平方非剰余の数が原始根候補になり、素因数分解を使い原始根を確定させる。
奇素数 p を法とする原始根 g は p を法として平方非剰余である.
URLリンク(nakano.math.gakushuin.ac.jp)
法997では、位数は996の約数になるので、aが、997の原始根であることを確かめるには、996=2・2・3・83 に注意して、a^498≠1、a^332≠1、a^12≠1 かどうかを調べれば十分。
URLリンク(www004.upp.so-net.ne.jp)
246:デフォルトの名無しさん
12/05/05 21:39:15.70
素因数分解が出来ていれば全ての原始根も求められる。一つ見つかっていた場合。
URLリンク(detail.chiebukuro.yahoo.co.jp)
mod19の乗法群は位数18の巡回群になります。
18=2×3×3
なので 2, 3 と互いに素な原始元の冪乗は全て原始元になります。
原始元は{2,3,10,13,14,15}ですが、
このなかのどれか一つを選択してgとした場合
g,g^5,g^7,g^11,g^13,g^17
は全て原始元になります。
247:デフォルトの名無しさん
12/05/05 22:08:34.97
>>244
別な方法で実装しました
要するに長い行列に対してm-sequenceでディザリングをしたかったのですが
後で処理をするためにディザリングの配列は残しておかねばなりません
なにかいい方法がありますか?
248:デフォルトの名無しさん
12/05/05 23:29:30.87
ありますよ。ちょっと待って下さいね。
249:NAS6 ◆n3AmnVhjwc
12/05/05 23:43:14.24
n番目の素数の概算値Paは
Pa=2.32nlogn+2n
で大体出せた
250:NAS6 ◆n3AmnVhjwc
12/05/05 23:54:41.30
あ、調べたら
Pa=nlogn+nloglogn
って書いてた
251:NAS6 ◆n3AmnVhjwc
12/05/06 00:02:10.05
調べた方が精度悪いや
252:デフォルトの名無しさん
12/05/06 00:03:17.22
荒らしかよtwitterか数学板にでも行けよ
253:デフォルトの名無しさん
12/05/06 10:44:31.59
>>252
さすがです
254:デフォルトの名無しさん
12/05/06 11:00:33.25
>>239
すべての原始根をもとめるのに素因数分解なしで高速に求められるのがあるのか?
255:デフォルトの名無しさん
12/05/06 11:53:07.35
n番目の奇素数を正確に出す式あるだろバカか
256:NAS6 ◆n3AmnVhjwc
12/05/06 13:04:47.55
あったら暗号が使えなくなるか
あっても指数時間の計算でしょ
257:NAS6 ◆n3AmnVhjwc
12/05/06 13:19:19.66
精度改良しましたが
Pa=2((0.45loglog(logn+0.25)+1.12)nlogn+n)
は多項式時間の概算計算す
258:デフォルトの名無しさん
12/05/06 13:56:39.90
質問の意図や前提をくみ取れない糞質問
が多い。それで回答者が逆質問をしたり
悪口を言ったりする。それを前もって思
い描く力が絶望的に欠如してるに違いない。
スーパーハッカーだけが意図を理解できる。
レアなそういう神が颯爽と登場する予感。
259:デフォルトの名無しさん
12/05/06 14:24:03.05
質問です
4年ほど前にやっていたことがあって、再度VisualStudio2008C++EEを落としてみたんですが、色々変わったんでしょうか?
講座サイトを見ながらやっているんですが、新規作成→追加で「C++ファイル」ではなく「C++クラス」と出てきてしまいます
試しに作ってみると、.cppに初めから何か書かれているんですが…
260:デフォルトの名無しさん
12/05/06 14:26:27.52
変わりなし。
嫌ならコマンドラインでコンパイルしたら良い。
261:NAS6 ◆n3AmnVhjwc
12/05/06 14:26:55.62
空のプロジェクトをチェックして
ソースファイルフォルダ右クリックで追加すればいい
262:デフォルトの名無しさん
12/05/06 14:30:54.14
ありがとうございます、助かりました!
.cppはその下に記述すれば良さそうですね。
263:NAS6 ◆n3AmnVhjwc
12/05/06 14:51:55.93
n番目の素数の概算がでるから
その前後調べて当たったら暗号無効化なの?
264:デフォルトの名無しさん
12/05/06 15:00:05.08
素数の個数と、素因数分解は別だろ。
暗号解読では素因数が判明しないとダメだろ。
265:NAS6 ◆n3AmnVhjwc
12/05/06 15:12:59.72
じゃあ、複二次式で四次篩作ればどうなん?
266:デフォルトの名無しさん
12/05/06 15:14:54.57
素因数分解の結果をキャッシュしてるから、素因数分解なんか一瞬だ
267:デフォルトの名無しさん
12/05/06 15:21:11.34
サルにもわかるRSA暗号: 解読法と素数
URLリンク(www.maitou.gr.jp)
268:デフォルトの名無しさん
12/05/06 15:25:46.00
無理。
2003 年の年末時点では素数と素数を掛けた数が 174 桁の数が、 100 台の業務用コンピュータで協調計算させて 3 ヶ月で素因数分解できることが実証されています。
一方、現在の RSA暗号 では一般的には素数と素数を掛け合わせた後が 310 桁にもなる数を用いています。
これでは、現在の数学で巨大な素因数分解を行うには、神をも味方につけた超人的な運を手に入れるしかないでしょう。
確率的には、残念ながら競馬やパチンコ、宝くじとは比べ物になりません。
URLリンク(www.maitou.gr.jp)
269:デフォルトの名無しさん
12/05/06 15:55:01.73
>>247
聞いてきましたわ。
579 名前:デフォルトの名無しさん [sage]: 2012/05/06(日) 01:28:04.90
画像処理の質問ではないな。
unionって知ってる?
unsigned longをbit配列と同意義で読み替えてやればいい。組み込み系でよく使う手法だがや
580 名前:デフォルトの名無しさん [sage]: 2012/05/06(日) 04:42:09.66
>>578
ビットフィールドでググれ
581 名前:デフォルトの名無しさん [sage]: 2012/05/06(日) 04:44:12.99
ただ速くしたいなら素直にビット演算としてSIMDで書いたほうが速いだろ
270:NAS6 ◆n3AmnVhjwc
12/05/06 16:28:18.94
x^4-a^4=(x^2+a^2)(x^2-a^2)
使って四次篩作れば
310桁は4桁計算だけど?
二次篩でも17桁
271:デフォルトの名無しさん
12/05/06 16:31:58.50
しらねえが。
1024ビット=310桁の素因数分解が一定時間で安定して出来るアルゴリズムを開発したら
研究所や大学からお呼びがかかるだろう。
272:デフォルトの名無しさん
12/05/06 16:41:15.73
NTTら、768ビット合成数を一般数体篩法にて完全分解に成功 2010/01/08
NTTは1月7日、スイス連邦工科大学ローザンヌ校(EPFL)、独ボン大学、フランス国立情報学自動制御研究所(INRIA)、オランダ国立情報工学・数学研究所(CWI)との共同研究により、
素因数分解問題において、従来の世界記録である663ビット(10進200桁)を上回る、
768ビット(10進 232桁)の合成数に対して、一般数体篩法による素因数分解を達成したことを発表した。
NTTらは今回、700ビットを超す素因数分解を達成したが、これは将来的にRSA暗号で使われている1024ビットの素因数分解も
達成される可能性があることを示唆することとなり、より高い強度かつ効率的な暗号技術を利用する必要性が高まることを意味する。
研究内容は、巨大な合成数に対して現段階で最も高速な解法として知られている一般数体篩法を用いて実施された。
篩処理は、全体の計算量の大半を占めるが、比較的容易に分散計算可能であることから多数の参加組織により並列に計算を行った。
処理は主にNTT研究所、EPFL、ボン大、INRIA、CWIにある多種多様のPCやクラスタを用い、
全体でおよそOpteron 2.2GHz換算で1,500年かけたのと同程度の計算量を要した。
また、理論的に最も計算料を要するステップの1つである線形代数は、分散計算が困難であり、今回は少数のクラスタを利用し、
それぞれのクラスタの速度や空き時間が異なっていても効率的に計算できる手法を開発・利用。
NTT研究所およびEPFLのクラスタ、またINRIAはフランスにあるALADDIN-G5Kを効率的に用い、
filteringで生成された疎行列からなる連立方程式を解いた。
Opteron 2.2GHz換算でおよそ155年の計算量を要した結果、分解に利用可能な解が得られたとする。
その結果、最終ステップとなる平方根(代数的数の平方根の計算及び最小公約数の計算)では、
EPFLに設置された計算機を用いることで、数時間で以下の解を得たという。
なお、同結果を受けてNTTでは、NTT研究所にて暗号技術全般の安全性を継続的に評価していくとするほか、
次世代暗号として楕円曲線上の演算規則を利用した新しい公開鍵暗号方式「楕円曲線暗号」の普及にも努めていくとしている。
URLリンク(news.mynavi.jp)
273:デフォルトの名無しさん
12/05/06 16:49:32.43
暗号アルゴリズムの危殆化
URLリンク(www.nic.ad.jp)
URLリンク(www.nic.ad.jp)
NTTなど、公開鍵暗号の素因数分解問題で768ビット整数の分解に成功
分解に要した計算資源は1700コア・年としている。デュアルコアのCPUを搭載したコンピュータなら、850台程度あれば約1年で分解できる計算になる。
実際にはNTT情報流通プラットフォーム研究所など5研究機関は2007年から分解を始め、PCクラスターなど300台程度のコンピュータを用いて、約3年かかったという。
URLリンク(itpro.nikkeibp.co.jp)
NTT、232ケタ整数の素因数分解に成功-世界記録を更新 現在使用の309ケタはあと10年は大丈夫!
URLリンク(highsociety.at.webry.info)
274:NAS6 ◆n3AmnVhjwc
12/05/06 16:57:07.10
URLリンク(www5b.biglobe.ne.jp)
四次篩実装
2^n次篩も簡単に作れます
275:デフォルトの名無しさん
12/05/06 17:09:31.65
一般・特殊数体ふるい法が現在最速ってあるし実際の記録更新もそれだが。
素因数分解 - Wikipedia
2005年5月、200桁の合成数 RSA-200が素因数分解される(一般数体ふるい法、Bahr, Boehm, Franke, Kleinjung)
2006年8月、10381 + 1 から67桁の素数が分解される(楕円曲線法、B. Dodson)
2006年9月、7352 + 1 の約数として現れる128桁の合成数が素因数分解される(一般数体ふるい法、情報通信研究機構、富士通、富士通研究所)
2007年5月、21039 ^ 1の約数として現れる307桁の合成数が素因数分解される(特殊数体ふるい法、NTT、ドイツのボン大学、スイス連邦工科大学との共同研究)
2010年1月、232桁(768ビット)(NTT、スイス連邦工科大学ローザンヌ校(EPFL)、独ボン大学、フランス国立情報学自動制御研究所(INRIA)、オランダ国立情報工学・数学研究所(CWI)。一般数体ふるい法。300台PCの並列計算処理。約3年)
改訂多重基底多項式篩法(MBPS2、Multiple Base Polynomial Sieve 2nd)
2006年8月に考案したMBPSの改良版。
本方式で世界記録に挑戦する。原理プログラムを作成し、現在は試作プログラムの作成中
試作プログラムが完成すれば、ほぼ計算量の予測が可能であるが、本方式で数年以内に1024ビットの
RSA暗号の解読は可能になると思われる。
MBPS(多重基底多項式篩法)に対して、多項式f(x)を法とし、素イデアル基底で分解できるイデアルの積
で作られるイデアルも素イデアル基底で分解できる、特長を利用した方法。
URLリンク(www.cs.t-kougei.ac.jp)
GNFS176
2005年4月22日、我々のチーム(下記)は 11^281+1 の約数である 176桁の合成数を「一般数体ふるい法(GNFS)」で分解した。
URLリンク(www.rkmath.rikkyo.ac.jp)
276:デフォルトの名無しさん
12/05/06 17:15:12.33
一人だけでも生き残ろうと…未来貯蓄銀会長密航試み逮捕
営業停止審査を受けている未来貯蓄銀行のキム・チャンギョン会長が4日、中国へ密航しようとしていたところを、
仁川(インチョン)港で海上警察に逮捕されたとSBSが単独報道した。
報道によれば、海上警察は逮捕したキム会長の身柄を不良貯蓄銀行捜査を担当する、
貯蓄銀行不正合同捜査チームへ送る予定だと伝えられた。報道によればキム会長は、
5日午前8時に予定されていた貯蓄銀行経営評価委員会に出席して、
営業停止前に最後の意見を陳述するようにとの金融当局の通知を受けた後、
中国へ密かに渡航しようとしていたことが分かった。
一人だけでも生き残ろうと…未来貯蓄銀会長密航試み逮捕
韓国語 [05/05]
URLリンク(news.donga.com)
277:NAS6 ◆n3AmnVhjwc
12/05/06 17:16:14.77
2^n次篩で世界記録楽勝す
実験するのにはデータ型のビットを増やしたクラス作んなきゃ
ならないけどめんどい
278:デフォルトの名無しさん
12/05/06 17:24:37.82
たとえば数分で可能な数で比較して、このソフトより速いんだったら少し信用する。
GGNFSはNFS法(the Number Field Sieve method; 数体ふるい法)を用いる素因数分解プログラムです。
SNFS法(特殊数体ふるい法)とGNFS法( 一般数体ふるい法)の両方に対応しています。作者はChris Monicoさんです。
URLリンク(homepage2.nifty.com)
279:NAS6 ◆n3AmnVhjwc
12/05/06 17:35:01.58
なんか色々インストールしなきゃならないからやだな
Long long intなら確認済みだから良いや
280:デフォルトの名無しさん
12/05/06 17:49:32.41
Windows Factoring Software Binaries (64bit & 32bit)
URLリンク(gilchrist.ca)
URLリンク(gilchrist.ca)
URLリンク(gilchrist.ca)
GGNFS suite プロジェクト日本語トップページ - SourceForge.JP
URLリンク(sourceforge.jp)
281:NAS6 ◆n3AmnVhjwc
12/05/06 17:50:28.40
調子にのって8乗してた訂正
282:NAS6 ◆n3AmnVhjwc
12/05/06 19:08:31.98
二次篩
x^2-a^2=(x+a)(x-a)
複二次式で四次篩
x^4-a^4=(x^2+a^2)(x^2-a^2)
同様に八次篩、十六次篩。。。
283:NAS6 ◆n3AmnVhjwc
12/05/06 19:10:45.55
以上桁は無意味
284:NAS6 ◆n3AmnVhjwc
12/05/06 19:24:01.64
私は世界の鍵を持っているbyスイーツ w
285:デフォルトの名無しさん
12/05/06 19:26:14.07
>>269
なるほど、そんなのあったなぁ
ビットフィールドでやってますた
286:NAS6 ◆n3AmnVhjwc
12/05/06 19:30:49.59
あ、十六次篩、二百五十六次篩か
287:NAS6 ◆n3AmnVhjwc
12/05/06 19:32:52.70
コード的にsqrtのネストなので
288:NAS6 ◆n3AmnVhjwc
12/05/06 19:36:05.13
指数は二倍ずつか
289:デフォルトの名無しさん
12/05/06 19:37:48.46
>>283
ある日突然道端のオヤジが公然わいせつオナニーを始めたところを想像してほしい
嫌だろ?
290:NAS6 ◆n3AmnVhjwc
12/05/06 19:41:29.02
勘違いを訂正
ちゃんと判定出来るよ
291:NAS6 ◆n3AmnVhjwc
12/05/06 19:44:27.00
2^n次篩だから桁は無意味だから
他の暗号方式を考えないとね
292: ◆QZaw55cn4c
12/05/06 21:47:31.01
>>254
リンク先をいろいろ紹介していただいてはいるのですが、難しくて私には一生理解できないだろうと思います。
そこで申し訳ないのですが、巨大素数の原始根を求めるために素因数分解が必要となる道筋を、もしよろしければ教えていただけないでしょうか?
簡単に試行してはみたのですが、2^31 で丸一日かかる有様です。あと手を打つとすればマルチスレッド化でしょうが、手元のは屁ノムx6 だしなあ。
URLリンク(ideone.com) (java でごめんなさい)
なお全部の原始根を求める必要はなくて 300~500位のものが数個手に入ればいいかと思います。
293:デフォルトの名無しさん
12/05/06 22:03:24.00
だからC/C++じゃないならよそでやってくれと
294:NAS6 ◆n3AmnVhjwc
12/05/06 22:06:14.59
素因数分解ならn次篩使えば出来るよ
ソース見てわからなかったらゴメン
295:NAS6 ◆n3AmnVhjwc
12/05/06 22:11:25.74
二次篩をネストしただけだから
296:デフォルトの名無しさん
12/05/06 22:25:01.22
2ch初心者も歓迎するスレです
297:デフォルトの名無しさん
12/05/06 23:50:19.40
>>292
たとえばp-1= 7*11*13として3が原始根を確かめるには。(pは素数でないから例として良くないが)
ラグランジュの定理から、p-1の全ての約数x(p-1を除く)に対して、3^x ≠ 1 (mod p)であることをいえばよい。
具体的には、3^(7*11) ≠ 1 (mod p)、3^(11*13) ≠ 1 (mod p)、3^(7*13) ≠ 1 (mod p)でいい。
ラグランジュの定理 (群論) - Wikipedia
G を有限群とし、H を G の部分群とする。このとき、H の位数は、G の位数を割り切る。
298:デフォルトの名無しさん
12/05/06 23:55:25.56
>>292
簡単に言えば、Z/pZの元 aのn乗が1となるのは、nはp-1の約数に限る。(ラグランジュの定理)
p-1以外では1とならなかったら原始根。
299: ◆QZaw55cn4c
12/05/07 01:25:25.23
>>297
なるほど、定義どおりにいけば、n が p について原始根であるかどうかをみるのに、現状では
n^1, n^2, n^3, ... n^(p-2) について 1 (mod p) をみなければならない
ところが、教えていただいた方法では
p - 1 の約数についてのみ、と個数を絞り込むことができる
のですね。仮にメルセンヌ素数 2^1279 - 1を目標にすると、
2^1279 - 1 = 2(2^640 + 1)(2^320 + 1)(2^160 + 1) .... (2^5 + 1)(2^5 - 1)
まで因数分解できるので、個々の因数を素因数分解していくと、チェックしなければならない場合の数が激減しますね。少なくとも 2^1279 とおり、ということはないはず。
あとは何が原始根の候補となりうるのかが判別すればいいのですが、これは、>>292 でも使用しているのですが、計算量が増えるにしても 2 から順次チェックするのが絞り込みやすいのかもしれません。
しんどいですけれども。
300: ◆QZaw55cn4c
12/05/07 01:26:49.83
>>299
×n^1, n^2, n^3, ... n^(p-2) について 1 (mod p) をみなければならない
○n^1, n^2, n^3, ... n^(p-2) について 1 (mod p) とならないことををみなければならない
301:デフォルトの名無しさん
12/05/07 02:01:22.14
あと、原始根をすべて列挙するのに、素因数分解が使える。
あと原始根の簡易判定としてこれ。
奇素数 p を法とする原始根 g は p を法として平方非剰余である.
URLリンク(nakano.math.gakushuin.ac.jp)
302:デフォルトの名無しさん
12/05/07 04:50:17.14
>>285
話がまだ続いているから、こっちに移動してもうちょっと詳しく質問してよ。
画像処理 その13
スレリンク(tech板)
582 名前:デフォルトの名無しさん [sage]: 2012/05/07(月) 01:09:44.70
>>579
処理系依存だがや
583 名前:デフォルトの名無しさん [sage]: 2012/05/07(月) 02:54:26.37
処理依存の回答を求めているからだろ。だからもっと依存の強いSIMDのようにハードリソースに合わせたソフトのつくりはアリだと思う
unsignd longは固定64bitと書いてあるように読みとれないか?処理系が変わると大元設計から変えるんだろうね。
えっと、、だがや
303:NAS6 ◆n3AmnVhjwc
12/05/07 05:41:05.67
n次篩使えば桁は無意味なのに
304:デフォルトの名無しさん
12/05/07 06:08:21.84
いい加減篩廚は別スレ立ててやれや
305:NAS6 ◆n3AmnVhjwc
12/05/07 06:17:52.76
四次篩
x^4-y^4=(x^2+y^2)(x+y)(x-y)
と分解したときにnの因数が()3つに分配されることを期待して
gcd(n,x+y)
からnの約数を見つける
同様に八次篩、十六次篩...ができる
306:NAS6 ◆n3AmnVhjwc
12/05/07 11:00:55.86
冷静になって考えたら二次篩でも四次篩でも演算回数同じだった
307:NAS6 ◆n3AmnVhjwc
12/05/07 11:36:43.44
二次篩で既にnによらない演算時間だった
>>292
二次篩でいいよ
n=3937
√3937≒63
63^2-n=32=2^5
64^2-n=159=3*53
65^2-n=288=2^5*3^2
(63*65)^2≡(2^5*3)^2(mod n)
gcd(n,63*65±2^5*3)=31
308:NAS6 ◆n3AmnVhjwc
12/05/07 11:47:16.92
これを実装したよ
309:デフォルトの名無しさん
12/05/07 11:50:11.99
速いソフトのバリナリあるから比較して味噌
Windows Factoring Software Binaries (64bit & 32bit)
URLリンク(gilchrist.ca)
URLリンク(gilchrist.ca)
URLリンク(gilchrist.ca)
310:デフォルトの名無しさん
12/05/07 12:11:03.30
このソフトで12秒かかった素因数分解。
これより速くないと世界一は無理だな。
yafu-1.31
URLリンク(sourceforge.net)
factor(222222222222222222222222222222222222222222222222222222222222222222222)
311:デフォルトの名無しさん
12/05/07 12:18:46.29
いい加減にしろ
312:NAS6 ◆n3AmnVhjwc
12/05/07 12:22:01.86
二次篩だったから俺の考えてたより遅いよ
313:デフォルトの名無しさん
12/05/07 15:28:37.39
>>302
そのスレのは私自身が書き込んだレスじゃないんですが・・・
だれか貼っつけた人が収拾してください
314:デフォルトの名無しさん
12/05/07 19:19:13.94
学が無くてもそれなりに語れるネタに狂喜乱舞て状況だな
315:デフォルトの名無しさん
12/05/07 23:02:24.54
スレタイ100回読め
316:デフォルトの名無しさん
12/05/08 19:43:04.58
【韓国BBS】台湾人は日本が好きで韓国を嫌う、その理由は?
韓国のコミュニティサイト「ガセンイドットコム」の掲示板に「台湾人たちが、日本が好きで韓国嫌いな理由は?」とのスレッドが立てられたところ、さまざまな意見が寄せられた。
スレ主は、台湾人は韓国と日本の好き嫌いがはっきり分かれていて、韓国は嫌いだが日本がとても好きだとの記事を紹介した。
スレッドには、その理由について「日本と台湾が島国同士だからではないか」との意見が数多く見られた。
・「台湾や日本は両国とも島国で、韓国を困らせるのが趣味。しかし台湾がいくら困らせてようとしても、韓国はあまりにも強くて賢くて倒れない」
・「島国どうしなので、傾向が似ているから惹かれあうのでは。どちらも内部の問題を外部のせいだとか方便を使う」
・「島国は島国どうし仲良くするのが好き」
・「私たちはできるなら台湾や日本の物を使わないことにしましょう。むしろヨーロッパやアメリカの製品を使用しましょう」
URLリンク(news.searchina.ne.jp)
◆台湾が韓国嫌いな本当の理由はこれ
韓国は「我々は薄情な裏切り者の日本とは違うから台湾との国交は永遠に断絶しない」と言っておきながら
台湾に公用車として5万台の不人気韓国車を売りつけ、代金を受け取ると同時に、台湾と国交を断絶し中国との国交を結んだ。
しかも韓国の新聞やTVはこれを「韓国の大勝利」「慌てふためく台湾」と馬鹿にして煽り、
ソウルや釜山にあった中華街を様々な規制や嫌がらせで潰し台湾系華僑を追い出した。
その後も韓国は何十年も台湾を攻撃し続けた。
・韓国は、アジアスポーツ大会の主催国争いにおいて、「台湾が権利を譲らなければ大会から台湾を追放する」と恫喝した。
・韓国は、「台湾は国家ではないので参加させない」と国際会議などで台湾を閉め出すなどの行為をしてきた。
・韓国は、台湾が国連やIMFなど国際機関へ加盟することに反対した。
・韓国は、1997年にデフォルトしIMF管理下に入ると台湾に対して「両国間の国家改善のため」といって100億ドルの資金援助を要求した。
317:デフォルトの名無しさん
12/05/09 06:42:43.87
>>316
C/C++以外のことも勉強になるな。
でも、スレチだろ。
318:デフォルトの名無しさん
12/05/10 06:57:15.84
アルゴリズムを実装してるのですが、二分木のrightとかleftが大量に出てきて、
しかも同じ内容の箇所をright用とかleft用に書き直しなので、マクロとかで上手くかけないかと思ってます。
func1() {
tree->left = tree->right;
tree->left->left = tree->right->right;
}
func2() {
tree->right = tree->left;
tree->right->right = tree->left->left;
}
たとえば上記のような2つの処理を書かないと駄目なとき、
funcX(A,B) {
tree->A = tree->B;
tree->A->B = tree->B->B;
}
と書いて
funcX(right,left);
funcX(left,right);
とかやりたいのですが、やり方はないでしょうか。元のtreeのメンバを配列にするのは
できないです。
319:デフォルトの名無しさん
12/05/10 07:57:24.58
treeにl()とr()を実装
320:デフォルトの名無しさん
12/05/10 07:58:13.70
treeの構造も書かずに聞くかよ。
例えばこんな手はあるぞ。
struct tree {
type * data;
struct tree * left;
struct tree * right;
};
↓
struct tree {
type * data;
struct tree * sides[2];
};
enum {Left, Right};
これなら、
funcX(int a1, int a2)
{
tree->sides[a1] = tree->sides[a2];
}
みたいに書いて
funcX(Right, Left);
みたいに書けるぞ。
321:デフォルトの名無しさん
12/05/10 08:16:07.85
質問の意図や前提をくみ取れない糞質問
が多い。それで回答者が逆質問をしたり
悪口を言ったりする。それを前もって思
い描く力が絶望的に欠如してるに違いない。
スーパーハッカーだけが意図を理解できる。
レアなそういう神が颯爽と登場する予感。
322:デフォルトの名無しさん
12/05/10 08:29:50.72
なんだろうね、少し前にもあった、この奇妙な改行感は。
行の短さも考慮すると、
コードが大量に出てくるこの板を、携帯で読んでるのかね。
バカじゃないの。
323:デフォルトの名無しさん
12/05/10 08:33:41.35
>>322 どこを縦読み?
324:デフォルトの名無しさん
12/05/10 08:34:47.70
少なくともtreeの構造は必要だな
325:デフォルトの名無しさん
12/05/10 08:52:53.61
>質 問の意図や前提をくみ取れない糞質問
>が 多い。それで回答者が逆質問をしたり
>悪 口を言ったりする。それを前もって思
>い 描く力が絶望的に欠如してるに違いない。
>ス ーパーハッカーだけが意図を理解できる。
>レ アなそういう神が颯爽と登場する予感。
326:デフォルトの名無しさん
12/05/10 08:54:21.11
こんなのとか
template <bool Swap>
struct LR {
Tree* operator()(Tree* parent) {
return Swap ? parent->right : parent->left;
}
};
template <bool Swap>
void funcX() {
LR<Swap> Left;
LR<!Swap> Right;
Left(tree) = Right(tree);
Left(Left(tree)) = Right(Right(tree));
}
メンバ変数ポインタを使ってみたりとか
template <bool Swap>
void funcX()
Tree* Tree::*left = Swap ? &Tree::right : &Tree::left;
Tree* Tree::*right = Swap ? &Tree::left : &Tree::right;
tree->*left = tree->*right;
tree->*left->*left = tree->*right->*right;
}
327:デフォルトの名無しさん
12/05/10 09:05:47.43
上のoperator()は&が抜けてた。正しくはこうね Tree*& operator()(Tree* parent) {
下は書き間違いが起こりやすそう、最適化が効きにくそうで微妙かも。
328:デフォルトの名無しさん
12/05/10 11:17:15.73
Treeの構造はこんな感じです。(本当はもっと名前が複雑で長い)
class Tree {Tree* right; Tree* left;}
bool使ったTemplateは複雑な条件に対応できにくそうで、配列はメンバを書き換えないと駄目なのでむりです。
そこでdo {}while(0)のマクロを使って
#define macro1(right, left) do { \
t-> ##right = s-> ##left; \
} while (0)
とかで書きました。
329:デフォルトの名無しさん
12/05/10 11:47:52.24
>>328 その ## 連結は不要で不正。
330:デフォルトの名無しさん
12/05/10 11:56:48.21
>>318
URLリンク(codepad.org)
331:デフォルトの名無しさん
12/05/11 01:59:16.78
テンプレートでかけるとは。
すごい
332:デフォルトの名無しさん
12/05/11 02:26:59.71
「テンプレートでかけるとは。 」
と思うほうが、すごい
333:デフォルトの名無しさん
12/05/11 06:15:16.11
うん
334:デフォルトの名無しさん
12/05/11 06:27:13.96
テンプレートでポインタとか使えるとか知りませんでした。
335:デフォルトの名無しさん
12/05/11 06:58:09.41
テンプレートがどこに出かけるの?
336:デフォルトの名無しさん
12/05/11 07:42:00.96
スムーズに動く2Dアクションを作ろうと思うんですが、マップってある程度(8ドットくらい?)ブロック単位で配列を置くだけでいいんでしょうか?
その場合、マップが広いとやたら長くなりそうなんですが…
337:デフォルトの名無しさん
12/05/11 15:12:33.62
C++はなんでも作れるって先輩から聞いていたんですが
入社4年でなんとか、使えるようにはなったんですが
未だに彼女が作れません。
本当に作れるんですかね?
338:デフォルトの名無しさん
12/05/11 16:26:08.78
ニ値元の彼女なら作られるっしょ
339:デフォルトの名無しさん
12/05/11 16:29:20.43
>>338
つ OpenGL
340:デフォルトの名無しさん
12/05/11 17:13:35.43
>>337
class Kanjo{};
みたいなクラスを作って、
Kanjo misaki;
341:デフォルトの名無しさん
12/05/11 18:45:36.36
vector<kanojo> v(make_kanojo());
for_each(v.begin(), v.end(), do_something());
342:デフォルトの名無しさん
12/05/11 21:04:06.88
bool Kanojo::Check(class Otoko);
343:デフォルトの名無しさん
12/05/11 21:25:17.15
bool Onna::Fuck(class Otoko);
344:デフォルトの名無しさん
12/05/11 23:31:57.68
VC++ですが引数つきマクロに,を含む型を正しく渡したいのですが
いい方法はありますか?
URLリンク(codepad.org)
macro "MAKE_VAR" passed 3 arguments, but takes just 2
をtypedef以外でなんとかしたい、ということです
よろしくお願いします
345:デフォルトの名無しさん
12/05/11 23:33:40.70
無い
typedefしろ
346:デフォルトの名無しさん
12/05/11 23:39:43.36
>>345
即レスありがとうございます
おとなしくtypedefすることにします
347:デフォルトの名無しさん
12/05/12 07:50:52.50
質問です。
あるキーワードが与えられると、それに対応する関数を実行するというプログラムがあります。
以下のような、関数ポインタとキーワードがセットになった配列で管理されています。
struct { void (*pFunc)(); char keyword[256]; } funcTable =
{
{ &FuncApple, "APPLE", },
{ &FuncOrange, "ORANGE", },
{ &FuncLemon, "LEMON", },
};
さて、これを可能な限りクラスに置き換えたいと思います。
Fruitクラスを親として、Apple、Orange、Lemonといった子クラスを用意したのですが、
これを配列に収めるにはどうしたら良いでしょうか。
もちろん、ifで1つ1つ分岐させて、それぞれについて new を記述すれば今の自分にも出来るのですが
子クラスの種類が増えると面倒くさそうな気がします。
348: ◆QZaw55cn4c
12/05/12 07:59:13.80
>>347
>>347 struct funcTable を C でどのように使いたいのかサンプルをひとつみせてほしい。
C++ のクラスだからといって劇的に改善されるわけではない。
349:デフォルトの名無しさん
12/05/12 08:16:02.53
>>348
現状こんな感じ。
Match()は、キーワードマッチをする関数だと思ってほしい。
//funcTableをなめる
for(int i=0; i<sizeof(funcTable)/sizeof(funcTable[0]); ++i)
{
//キーワードマッチしたら、該当の関数を実行
if ( Match ( inputKeyword, funcTable[i].keyword ) )
{
funcTable[i].pFunc( ); //←関数ポインタ
break;
}
}
この関数ポインタの部分を、なんとか出来ないかなって。
350:デフォルトの名無しさん
12/05/12 09:13:54.91
ナニがしたいのか意味不明なのでそこらへん推敲して出直してください。
351:デフォルトの名無しさん
12/05/12 09:30:26.44
>>350
普通にif文で書くなら、
Fruit *f;
if (条件1) f = new Apple();
else if (条件2) f = new Orange();
else if (条件3) f = new Lemon();
:
:
f->Hoge();
という感じになると思うんだけど、
数が増えるといちいちifで書いてられないので、何かスマートな方法が無いかなと。
352:デフォルトの名無しさん
12/05/12 09:54:28.36
その似非オブジェクト指向臭いコードよりも>349の方が自然じゃないか。
353:デフォルトの名無しさん
12/05/12 10:27:51.24
>>352
そういうものかなー?
1人で考えてると何が自然なのか分からなくなってくるね(´・ω・`)
ただまあ、1つの条件式(キーワード)つき、複数の関数ポインタをセットしなきゃならないような場合、
例えば初期化処理と、ルーチン本体と、終了化処理などがある場合だと、全部書かなきゃならないのは不便かも?
354:デフォルトの名無しさん
12/05/12 10:38:01.60
それだったら、関数ポインタを構造体に纏めるだろ。
で、初期化が必要だったりしたらクラスにしてメンバー関数にするとか。
そういうアプローチはオブジェクト指向とは違うけれど、自由度は高いんじゃね。
355:デフォルトの名無しさん
12/05/12 10:51:15.71
キーワードとフルーツの対応表を作るだけだよな?
356:デフォルトの名無しさん
12/05/12 11:03:47.86
347が要求を満たすなら文字リテラルとの比較でそもそも文字列のまま比較する意味が無い
マジ推敲しなおせや
357:デフォルトの名無しさん
12/05/12 11:31:53.82
考えてるうちに、関数ポインタ+FactoryMethodパターンあたりの組み合わせで行けそうな気がしてきた。
>>354
実際に関数ポインタを書かなきゃならないのは変わらないけど、
それを構造体にまとめることで、外側(対応表)に出る情報を抽象的&減らそうってアプローチね?
>>355
うん。それをどうしたら実現できるかなって。
>>356
詳しく。
358:デフォルトの名無しさん
12/05/12 12:02:31.53
>>347
意味分からんです
>>349
>> この関数ポインタの部分を、なんとか出来ないかなって。
typedefするぐらいです
>>351
349の内容と違いますよね
線形探索が嫌なら適当なコンテナにでも詰め込めばいいです
>>357
>>347を移植するのに、Factory使う人はいないですし
数ポインタの部分を、なんとかしたかったのでは?
359:デフォルトの名無しさん
12/05/12 12:24:11.75
>>347
std::map<std::string, std::function> でおしまいな話じゃないの?
(std::function が使えないなら boost::function で。)
360:デフォルトの名無しさん
12/05/12 19:59:39.29
>>347
>さて、これを可能な限りクラスに置き換えたいと思います。
IDが無いからどれが質問主のレスなのか追いづらいんだが
もともとの要点は関数を書いているところをクラスに置き換えたいって話だよね?
クラスインスタンスを返す関数にすれば同じ意味になるんじゃない
struct { Fruit* (*pFunc)(); char keyword[256]; } funcTable =
{
{ &Apple::StaticCreateInstance, "APPLE", },
{ &Orange::StaticCreateInstance, "ORANGE", },
{ &Lemon::StaticCreateInstance, "LEMON", },
};
実際はmap使うなり文字列を定数化するなり効率化した方がいいと思うけどね
361:デフォルトの名無しさん
12/05/12 20:01:59.41
最も評価の悪い国
1位 イラン
2位 パキスタン
3位 北朝鮮
4位 イスラエル
5位 ロシア
6位 韓国 ←←←←←←←←←←←
最も評価の高い国
1位 日本
2位 ドイツ
3位 カナダ
4位 イギリス
5位 中国
6位 フランス
BBC世界世論調査2012
URLリンク(www.globescan.com)