题目来源: 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; }