求x的每一位平方和乘c x 打表,降低複雜度

2021-09-17 01:14:41 字數 1551 閱讀 2271

acm:

題目:輸入三個數 a,b,c,輸出 [a,b] 這b−a+1 個整數中,有多少個整數 x 滿足,x 每一位的平方和 ×c=x

其中 a,b,c 都不超過10^9

input

三個正整數 a,b,c,意義見題面。

output

乙個整數(沒有輸出 0),意義見題面。

分析:sum

∗c=t

⇒sum

=t/c

sum*c=t ⇒ sum=t/c

sum∗c=

t⇒su

m=t/

c我們可以找到[a,b]範圍中是c的倍數的數就行那麼複雜度可以降到1e9

/c∗9

1e9/c*9

1e9/c∗

9,但是這樣做複雜度還是太高了,對於c比較小的話。

然後我試試把[1,

1e9]

[1,1e9]

[1,1e9

]中c比較小合法數生成出來,結果發現數很少,於是我把c為1~100的合法數都打表

複雜度就降到1e9

/100∗9

1e9/100*9

1e9/10

0∗9啦…

#include

#define ll long long

#define fo(i,j,n) for(register int i=j; i<=n; ++i)

using

namespace std;

int a,b,c,t,ans;

int d[10]

=;int mp[

101][11

]=,,

,,,,

,,,,

,,,,

,,,,

,,,,

,,,,

,,,,

,,,,

,,,,

,,,,

,,,,

,,,,

,,,,

,,,,

,,,,

,,,,

,,,,

,,,,

,,,,

,,,,

,,,,

,,,,

,,,,

,,,,

,,};

// 打表

void

get()if

(now==i)cout<',';

if(now==i)ans++;}

// if(ans)cout<<"乘數:""},"

}int

main()

cout

}if(a%c==

0)t=a;

else t = a+

(c-a%c)

;int i = t/c;

for(

; t<=b; t+

=c,i++

)// if(now==i)cout(now==i)ans++;}

// if(ans)cout<<"乘數:"return0;

}

提取數字的每一位

提取數字的每一位,可以使用取餘和除法的組合來實現。如下 int ival dequenumbers cin ival while ival 因為對 10 取餘得到的是當前數字的最後一位,比如 1234 10 的結果是 4,所以記錄結果的時候必須將每次取餘得到的數字放到已經提取出的部分結果的前面。對於...

輸出整數的每一位

問題描述 正序輸出整數的每一位 例如 輸入1234,輸出1234 思路 方法一 遞迴實現 利用遞迴的特點,當遞迴到整數的最高位時,輸出並開始返回 方法二 利用陣列儲存 將整數的每一位以字元形式儲存到陣列當中,並將其輸出 遞迴實現 void printr int n 陣列儲存 void printno...

列舉獲取整數的每一位

b1016考察的關鍵是如何列舉獲取整數的每一位。乙個整數a,對a取余能拿到它的個位,令a除以10能讓a去掉個位。如123,a 123 10,則a為3,a a 10,則a為12。列舉獲取每一位,只要用乙個迴圈控制,每次判斷a有沒有變成0 即取完了最後的個位 在每次迴圈中,獲取它的個位。考察的另乙個關鍵...