シンプルで高速な剰余電力解析(C言語)は - ポールCCの妹をヒット

問題点Cは:ポールCCの妹がヒット
説明
17姉妹校は、CCの妹は、常に携帯電話を再生するために弓歩いたのでCCは、ポールを打つと呼ばれる姉妹を、持っている、私はしばしば衝突で彼の鼻、ポールを打ちます休憩後、CCはあなたがポールを打つしたいどのくらいの時間ドアで姉妹校を所有したいと思います。1日のプレーに、正方形に行くCCの姉妹校、全行程はCCの姉妹は、n番目のポールに見舞われた知られ、CCの姉妹校は初めて離れて1メートルのポールタイムを打つ、あなたはポールを打った後たびに自分の潜在意識を変えますですi番目の107メートルは、次のポールをヒットする2I%の後にポールを打つが、今CCの妹がどれだけ離れて知りたいことを注意限り。

形式の
入力フォーマット
入力のn(1 <= N <= 10 ^ 5)、CCのポール衝突の全体数の姉妹仕上がり

出力フォーマット
出力s、CCの姉妹校は行くために、完全な距離を終了します

試料
サンプル入力コピー
。1
。3
。4
サンプル出力コピー
1
。7
15
プロンプトの
テストデータの複数のセット、ファイルの入力端でループに入力され、データの700セットの合計、制御プログラムの実行時ください

解釈:2の10パワーのカウント、ブルートフォース手法は、次のように時間複雑度はO(n)は、速やかに同じ電力ではないように、明るくサイクル10時間を定義する場合:
2の10の電力を、 10はあなたがゆっくりな(最初のコード)として、元の数を拡張することができます限り、偶数であります:

#include <stdio.h>
#include <math.h>
long long Mode(long long a, long long b, long long mo)
{
	long long sum=1;
	a=a%mo;
	while(b>0)
    {
		if(b%2==1) //加入是奇次方,把多余的一个去掉
			sum=(sum*a)%mo;
		b/=2;  
		a=(a*a)%mo; //这两条语句是把原数不断增大,减少循环次数
	}
	return sum;
}
main()
{
    int x,n,sum=1,ss=1;
    while(scanf("%d",&n)!=EOF)
    {
        sum=1;
        if(n>=1&&n<=10000)
        {
            for(x=2;x<=n;x++)
            {
                ss=Mode(2,x-1,107);
                sum=sum+ss;
            }
            printf("%d\n",sum);
        }
    }
}

最初のループ:これは2の累乗、4の唯一の5乗であるので、元の数4のようになりますので、^ 10 2、* 5 2であり、
第二サイクル:電源が奇数であるため、5ので、余分和に(合計= 4)、次いで5/2 = 2 4/2 = 2ない差(これに沿って整数または整数データ)と、それは(サイクルに影響を与えないように、正方形16に継続将来奇数の通電開始と見なすことができる)
第3のサイクル:2 SO電源256となる保つ、偶数である
4サイクル:合計ので、その和に乗算器256に、1%2 == 1 4最終和= 256x4 = 1024、既に存在し、その後で応答和返し
デジタル:
元:2 ^ 10
。1,4 ^ 5
2,16 ^ 2×4
3,256×4 ^
4,1024

出版元の記事 ウォンの賞賛0 ビュー97

おすすめ

転載: blog.csdn.net/qq_46182442/article/details/104024363