題意就是找出n(1<=n<=65536)的乙個倍數,要求組成該數的不同數(0-9)最少,多解時,輸出最小的。學過離散的都知道,通過鴿巢原理,組成解的不同數最多為2,且每種組合最多經歷n個狀態,所以暴力列舉所有組合的複雜度為65536*100,完全可以接受。
這裡需要自己手寫乙個高精度類以比較大數,先列舉乙個數的情況,若不存在,再列舉二個數的情況即可。
#include #include #include #include using namespace std;
const int maxn=66000;
struct bign
bign(int l,int c)
if(y)
while(!q.empty())
return tmp;}}
int v2=(u*10+y)%n;
if(!vis[v2])
return tmp;}}
}return tmp;
}int main()
{ while(scanf("%d",&n) && n)
{bign ans;int flag=0;
for(int i=1;i<10;i++)
{memset(vis,0,sizeof(vis));
int s=0,p=i,c=0;do{
s=(s+p)%n;
//cout<
數學專項number theory LA 2955
一道關於梅森素數的題,這裡需要先得出乙個猜想,那就是只有梅森素數的一次冪的乘積的因子之和才能為2的次冪。這個猜想我不會證明,我只是測了下前100個素數,然後就覺得這個猜想應該是正確的,結果也確實如此。求數學帝證明 2 31內僅有8個梅森素數,只要將每個pi因式分解,直接剔除那些既不是梅森素數,也不是...
數學專項matrix UVa 11149
典型的倍增法的應用,這裡我用了遞迴的方式實現,這樣比較直觀,也比較好寫 主要是因為迭 的一直wa 注意輸入的時候需要取模。include include include using namespace std const int maxn 50 typedef int matrix maxn max...
樹狀陣列專項
poj 2352 此題一開始理解錯了乙個地方,而且一開始也沒很好的理解樹狀陣列,做了很長時間。其實此題的輸入是有規律的,即一直按照x,y遞增的規律。所以,判斷第i個輸入,只需要判斷 前i 1個元素中x的值,而不用考慮y,因為y一直是遞增輸入的。所以用乙個樹狀陣列來處理x即可。include incl...