C - 共同プライム

数Nを考えると、あなたはN.と互いに素である包括AとBの間の整数の数をカウントするように要求されている 
二つの整数は、それらが1以外の一般的な正の約数を持たない場合は互いに素または互いに素であると言われていますか、その最大公約数が1であれば、同等、数1は、すべての整数と互いに素です。

·······

この質問は、いくつかの手順:

図1に示すように、演算の第1の基本原理のn数〜bが、それは確かに〜を合計数を減算B、Nと互いに素でないような素数の倍数である場合、異なる素数を使用して解決nと交差しません残りの素数nは、友人の数に素数です

図2に示すように、第1演算〜-1、次いで1〜Bで計算素数nおよびnは素数、減算。

書式#include <iostreamの>
 使用して 名前空間はstdを、
typedefの長い 長いLL。
LL [ 10000 ]。
INT メイン()
{ 
    LLのT; 
    cinを >> トン。
    (LL II = 1 ; II <= T; II ++ 
    { 
        LLのX、Y、N。
        CIN >> X >> Y >> N。
        LLのNUM = 1、合計= 1、すべて= 0 、回。
        以下のためにint型 I = 2、iは++;私は<= N *)    // 向A数组里塞のn的质因数
        {
              場合(N%iが== 0 
            { 
                NUM ++ 
                [NUM] = I。
            } 
            一方、(N%のI == 0 
            { 
                N = N / I。
            } 
         } 
        もし、(N> 1)++ NUM] = N。
        int型 I = 1 ; I <(1 ; << NUM)iが++ 
        {  = 0、和= 1;
             についてINT J = 0 ; J <NUM; J ++)   // NUM数によって因子、
            {
                 IF1&(I >> J))       //はj番目の選択因子か否かを決定
                { 
                    SUM * = [+ J 1。]; 
                    タイムズ ++ ; 
                } 
            } 
            IF(SUM == 1つの || SUM == 0 続行; 
             IF(タイムズ%2 == 1 
            { + = Y / 和。
                全て - =(X- 1)/ 和。
            } 
            { 
                すべて - = Y / 和。 + =(X- 1)/ 和。
            } 
        } 
        のprintf(" ケース#1%のLLD:%LLDする\ n "、II、Y-X + 1 - すべて)。
    } 
    戻り 0 
}

上記。

 

おすすめ

転載: www.cnblogs.com/zjydeoneday/p/11361000.html