uva 10515 - Powers Et Al.(数论)

题目链接:uva 10515 - Powers Et Al.

题目大意:给出m和n,问说mn的个数上的数是多少。

解题思路:其实只要看m的最后一位数就可以了,判断最有一位的周期,然后用n%t即可。

#include <cstdio>
#include <cstring>
#include <vector>

using namespace std;

const int maxn = 15;
const int maxs = 105;

vector<int> g[maxn];
char a[maxs], b[maxs];

void init () {

    int v[maxn];
    for (int i = 0; i < maxn; i++) {

        int tmp = i;
        memset(v, 0, sizeof (v));

        while (v[tmp] == 0) {
            v[tmp] = 1;
            g[i].push_back(tmp);
            tmp = tmp * i % 10;
        }
    }
}

int main () {
    init();
    while (scanf("%s%s", a, b) == 2 && ( strcmp(a,"0") || strcmp(b,"0")) ) {

        if (strcmp(b, "0") == 0) {
            printf("1\n");
            continue;
        }

        int u = a[strlen(a)-1] - ‘0‘;
        int len = strlen(b);

        int tmp = 1, m = g[u].size();
        for (int i = 0; i < len; i++)
            tmp = (tmp * 10 + (b[i] - ‘0‘)) % m;
        printf("%d\n", g[u][(tmp-1+m)%m]);
    }
    return 0;
}

uva 10515 - Powers Et Al.(数论),布布扣,bubuko.com

时间: 2024-10-17 08:57:56

uva 10515 - Powers Et Al.(数论)的相关文章

UVa 10515 Powers Et Al.

方法:数论 注意last digit只与m的最后一位和m有关,同时,如果了解number theory 中的multiplicative order 的话,就会发现,1-9 mod 10 的order 不是1 就是4, 所以结果只与m的最后一位和n mod 4的结果有关.而n mod 4 的结果只与 n的最后后两位有关.注意如果n % 4 = 0, 需要n += 4 ,否则会得到m^0 = 1. code: #include <cstdio> #include <cstring>

UVA 1341 - Different Digits(数论)

UVA 1341 - Different Digits 题目链接 题意:给定一个正整数n,求一个kn使得kn上用的数字最少,如果相同,则输出值最小的 思路: 首先利用鸽笼原理证明最多需要2个数字去组成 设一个数字k,组成k,kk,kkk,kkkk... %n之后余数必然在0 - (n - 1)之间,所以必然能选出两个余数相等的数字相减为0,这个数字就是由0和k组成的. 因此只要考虑一个数字和两个数字的情况,去bfs,记忆化余数,因为余数重复必然形成周期了 代码: #include <stdio.

UVA 10693 10693 - Traffic Volume(数论)

题目链接:10693 - Traffic Volume 根据物理知识, 车经过的时间等于,距离/速度,所以可以列出公式t = (l + d)/v,v/2f + d/v,只有当v / 2f = d/v时,时间最小,v = sqrt(2df),之后时间也能算了. #include <stdio.h> #include <string.h> #include <math.h> double l, f; int main() { while (~scanf("%lf%

UVA 618 - Doing Windows(数论)

题目链接:618 - Doing Windows 题意:给定一个大小不能变的屏幕,和四个大小可以变的窗口,变化要保持长宽比,问这四个窗口能不能调整后全部放下正好填满屏幕,不能重叠 思路:情况一共就几种:4个叠一起,3个叠一起+一个,2个和2个,一个和两个叠一起在一个,把这几种情况全判断了就可以了,判断过程利用gcd,lcm可以求边长. 代码: #include <stdio.h> #include <string.h> long long gcd(long long a, long

UVA 1426 - Discrete Square Roots(数论)

UVA 1426 - Discrete Square Roots 题目链接 题意:给定X, N, R,要求r2≡x (mod n) (1 <= r < n)的所有解,R为一个已知解 思路: r2≡x (mod n)=>r2+k1n=x 已知一个r!,带入两式相减得 r2?r12=kn => (r+r1)(r?r1)=kn 枚举A,B,使得 A * B = n (r + r1)为A倍数 (r - r1)为B倍数 这样就可以推出 Aka?r1=Bkb+r1=r => Aka=Bk

UVA 11490 - Just Another Problem(数论)

11490 - Just Another Problem 题目链接 题意:有S个士兵,排成一个矩阵,矩阵中可以有两个洞,要求两个洞上下左右厚度一样,问能缺少士兵的情况数. 思路:推推公式,设厚度为a, 正方形为i, 那么(3 a + 2 i) (2 a + i) = S + 2 i i; 化简一下得到6 i i + 7 a i = S 由于S很大,所以去枚举厚度,这样只要枚举到sqrt(S)就够了,复杂度可以接受 代码: #include <stdio.h> #include <stri

UVA 417 - Word Index(数论)

题意:417 - Word Index 题意:每个字符串按题目中那样去映射成一个数字,输入字符串,输出数字 思路:这题还是比较水的,由于一共只有83000多个数字,所以对应一个个数字去映射就可以了,注意字符串进位的情况处理即可 代码: #include <stdio.h> #include <string.h> #include <map> #include <string> using namespace std; char str[10]; map<

UVA 10995 - Educational Journey(数论)

题意:10995 - Educational Journey 题意:给定A遇到C,M,D的时刻和D遇到C,M的时刻,求C遇到M的时刻 思路:先把时间都处理成秒,然后从A遇到C后,从该点出发,A遇到D和C遇到D,就能求出速度Va和Vc之间的关系,由A遇到M后,从该点出发,A遇到D和M遇到D可以推出Va和Vm的关系,从而推出Vc和Vm的关系,然后由C和M遇到点出发,C遇到D和M遇到D的时间可以算,然后又有速度关系,就可以推出他们相遇时间 代码: #include <stdio.h> #includ

UVA 11314 - Hardly Hard(数论)

题目链接:11314 - Hardly Hard 题意:给定A,B两点,求Y轴上一点C和X轴上一点D,使得该四边形周长最小. 思路:B以Y轴做对称点,A以X轴做对称点,然后两点相连就是其他三边的周长,因为两点间线段最短,然后再加上AB长度即可 代码: #include <stdio.h> #include <string.h> #include <math.h> int t; struct Point { double x, y; Point() {} Point(do