UVA 11256 - Repetitive Multiple(数论)
2014-09-05 17:09
218 查看
UVA 11256 - Repetitive Multiple
题目链接题意:找出一个最小值满足: 是n的倍数, 是重复数字(根据题目中的定义)
思路:如果是重复数字,形式必然是100010001这类形式乘上一个对应位数的数字,所以可以枚举这样形式的数字,和n取gcd,如果剩下的数字位数满足小于位数,那么就乘上一个数字使得等于最小满足位数,这样不断记录最小值即可
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
long long t, n, mi[10];
long long count(long long x) {
long long ans = 0;
while (x) {
x /= 10;
ans++;
}
return ans;
}
long long gcd(long long a, long long b) {
while (b) {
long long tmp = a % b;
a = b;
b = tmp;
}
return a;
}
int main() {
mi[0] = 1;
for (long long i = 1; i < 10; i++)
mi[i] = mi[i - 1] * 10;
scanf("%lld", &t);
while (t--) {
long long ans = 999999999999999999;
scanf("%lld", &n);
long long len = count(n);
for (long long i = 1; i <= len; i++) {
long long num = 1;
for (long long j = i + i; j <= 2 * len; j += i) {
num = num * mi[i] + 1;
long long yu = n / gcd(num, n);
if (count(yu) <= i) {
long long tmp = mi[i - 1] / yu * yu;
if (tmp < mi[i - 1]) tmp += yu;
ans = min(ans, num * tmp);
}
}
}
printf("%lld\n", ans);
}
return 0;
}
相关文章推荐
- uva 11256 - Repetitive Multiple(gcd+暴力)
- uva 11246 - K-Multiple Free set(数论)
- UVA 11246 - K-Multiple Free set(数论推理)
- uva 11246 - K-Multiple Free set(数论)
- UVA 11246 - K-Multiple Free set(数论推理)
- UVA 11246 - K-Multiple Free set (数论/容斥)
- POJ2407 ZOJ1906 UVA10229 Relatives【欧拉函数+数论】
- uva 10555 - Dead Fraction)(数论)
- UVA 10127 Ones (数论) 计算至少要多少位十进制的1能够被n整除
- UVA - 11538 - Chess Queen (数论~)
- UVa 11889 Benefit (数论)
- UVA 350 (暑假-数论 -E - Pseudo-Random Numbers)
- UVA 10006 - Carmichael Numbers 数论(快速幂取模 + 筛法求素数)
- UVA 1415 - Gauss Prime(数论,高斯素数拓展)
- uva 1569 - Multiple(最短路)
- uva 10168 Summation of Four Primes(数论-哥德巴赫猜想)
- ZOJ 1136 Multiple(BFS + 数论 同余剪枝 搜索数字的倍数 )
- UVA10650 - Determinate Prime - 数论
- ACM 数论 UVALive 6170 Esspe-Peasee 解二元一次方程 扩张欧几里得算法
- [UVA1434] YAPTCHA(数论,威尔逊定理)