题目来源: 2012天津现场赛

A, 背景为麻将的模拟题,按照要求模拟就好。

B,sqrt(N)分解因子,然后暴力算即可

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;

int sum(int x,int b){
    int res = 0;
    while(x){
        res += (x%b)*(x%b);
        x /= b;
    }
    return res;
}
char mp[50] = "0123456789ABCDEF";

int main(){
    int n, m;
    while( scanf("%d%d", &n,&m) != EOF){
        int ans = 0;
        for(int i = 1; i*i <= n; i++){
            if( n%i == 0 ){    
            if( i*i == n ){
                ans += sum(i,m);        
            }
            else{
                ans += sum(i,m);
                ans += sum(n/i,m);
            }
            }
        }
        int a[50], n1 = 0;
        while(ans){
            a[n1++] = ans%m;
            ans /= m;
        }
            
        for(int i = n1-1; i >= 0; i--){    
            printf("%c", mp[a[i]]);    
        } puts("");
    }
    return 0;
}
View Code

相关文章: