hdu 4432 数学杂题

http://acm.hdu.edu.cn/showproblem.php?pid=4432

6分钟写的代码,一上午去调试,,

哎,一则题目没看懂就去写了,二则,哎,,恶心了,在坚持几天然后ACM退役,想当初一直想着regional拿奖,然后在保研的时候有个更漂亮的简历,卧槽,但是,其实喜欢的是静下心,把一块知识好好弄懂,看着自己一点点由不会到会,由不熟到熟练,而且在这个过程中总结一些思考问题的方法,能把这种思维应用于其他

但是----唉,急功近利式地学,老想着快,一没思路就去看题解,然后平均每两天一场比赛,外加队友之间相互抱怨猜忌,哎,恶心了,,真的,做完明天的排位,可能就该退掉了,最后几次排位再好好去做做,然后滚蛋

以后还是先好好试下样例再去写,那个hint的解释我发现我想了三个版本都没对,擦,,

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <iostream>
#include <iomanip>
#include <cmath>
#include <map>
#include <set>
#include <queue>
using namespace std;

#define ls(rt) rt*2
#define rs(rt) rt*2+1
#define ll long long
#define ull unsigned long long
#define rep(i,s,e) for(int i=s;i<e;i++)
#define repe(i,s,e) for(int i=s;i<=e;i++)
#define CL(a,b) memset(a,b,sizeof(a))
#define IN(s) freopen(s,"r",stdin)
#define OUT(s) freopen(s,"w",stdout)
const ll ll_INF = ((ull)(-1))>>1;
const double EPS = 1e-8;
const int INF = 100000000;
int bit[5000];
ll quick(ll base, ll x)
{
    ll ret=1;
   // printf("## b=%lld x=%lld ",base,x);
    while(x)
    {
        if(x&1)
            ret=ret*base;
        base*=base;
        x/=2;
    }
   // printf("ret=%lld\n",ret);
    return ret;
}

ll cal(ll i, ll m)
{
    ll ret=0;
   // printf("###########%lld\n",i);
    while(i)
    {
        ret+=(i%m)*(i%m);//quick(i%m,m);
        i/=m;
    }
    //putchar('\n');
    return ret;
}

int main()
{
    //IN("hdu4432.txt");
    ll n,m,s,ans,tmp;
    char c;
    while(~scanf("%I64d %I64d",&n,&m))
    {
        s=(ll)sqrt(n*1.0);
        ans=0;
        for(ll i=1;i<=s;i++)
        {
            if(n%i == 0)
            {
                ans+=cal(i,m);
                if(n!=i*i)ans+=cal(n/i,m);
            }
        }
        //printf("%I64d\n",ans);
        //show(ans,m);
        int cnt=0;
        while(ans)
        {
            bit[cnt++]=ans%m;
            ans/=m;
        }
        for(int i=cnt-1;i>=0;i--)
        {
            putchar( (char)(bit[i]<=9?(bit[i]+'0'):(bit[i]-10+'A')) );
        }
        putchar('\n');
    }
    return 0;
}
时间: 2024-08-07 23:29:14

hdu 4432 数学杂题的相关文章

hdu 4961 数学杂题

http://acm.hdu.edu.cn/showproblem.php?pid=4961 先贴个O(nsqrtn)求1-n所有数的所有约数的代码: vector<int>divs[MAXN]; void caldivs() { for(int i=1;i<MAXN;i++) for(int j=i;j<MAXN;j+=i) divs[j].push_back(i); } 有了这个当时理下思路就可写了,但是重复数处理注意: 1.用一个数组vis[]  vis[i]=1表示i存在

hdu 4974 数学杂题/证明

题意模型:n个正数,每次可以做下面俩种操作之一: 1:取一个数减一. 2:取俩个数各减一. 都必需保证每次操作的数>0. 求使得所有数字为0的最少操作次数. 都说是简单题,网上还有不少错误解法(排序后扫一遍,每次取最大的俩个数减到0: 2 2 2 这样是4次,正解3次). 应该是每次取最大的俩个数,各减1. 若maxi>sum/2,则ans=max,每次操作都用那个max,和其他一个数,最后max没人找了,自己减. 若maxi<sum/2,则ans=(sum+1)/2.每次操作找俩个当前

hdu 3641 数论 二分求符合条件的最小值数学杂题

http://acm.hdu.edu.cn/showproblem.php?pid=3641 学到: 1.二分求符合条件的最小值 /*==================================================== 二分查找符合条件的最小值 ======================================================*/ ll solve() { __int64 low = 0, high = INF, mid ; while(low <=

hdu4972 数学杂题

题意:有俩个队进行n场比赛,每场只记录下分差的绝对值(不知道哪一方),求最后可能比分. 思考了半天,还分类讨论..结果也想到只有 1->2.2->1的情况有俩种可能...哎还是跪,这题坑点交多,自己弱爆.. 官方正解:既然已经知道差值,那么只有知道双方最终得分之和就知道比分了!(x-y已知,当然要用x+y去确定!问题转化能力!)问题转化了!每次1->2/2->1有总分增加1/3的俩种可能,设有cnt个,则有cnt+1个和(0个1,1个1...cnt个1),当最后比分一样(x-y=0

1005:Number Sequence(hdu,数学规律题)

Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. Given A, B, and n, you are to calculate the value of f(n). Input The input consists of multiple test cases. Each test case co

zoj 3629 数学杂题

//#pragma comment(linker, "/STACK:102400000,102400000") #include <cstdio> #include <cstring> #include <algorithm> #include <string> #include <iostream> #include <iomanip> #include <cmath> #include <ma

BZOJ3629-聪明的燕姿【数学杂题】

T浪h改姆9少FVT优乐Phttp://www.docin.com/vwhd00606 AM0瓤XN7Ukahttp://weibo.com/u/6367436044 蹈4s釉畏耐E帜2先http://shufang.docin.com/sina_6372939737 惨涟谴涸魄4wm械狡4禄whttp://tushu.docin.com/sina_6359754391 43X86p至靡06第h貉2http://www.docin.com/jpvfe032 7rfa03噬2l障http://hu

数学趣味题(相邻同加同减问题)

想要弥补数学方面的知识于是我看了刘汝佳老师的算法艺术. 从简单开始在这里记录一下. 题目的描述 很容易理解但是让我想的话,我会感觉很困难. 似乎见到多了,对这种问题有一种天生的恐惧. 但是学习嘛,一点一点积累. 刘汝佳老师这样讲到. 先把8个点归为红色和蓝色两类. 相邻的点不在同一类中. 假设我们先看一下最下面的ABCD四个点,假设A点有a个麻烦子,B点有b个麻烦子,C点有c个,D点有d个. 我们先让A,B同时增加c个,然后让B,C同时减少c个,这样就C就没有了,而A中多了c个.这样我们就能把同

【最小生成树杂题】

这里谈一下最小生成树 生成树的概念:连通图G的一个子图如果是一棵包含G的所有顶点的树,则该子图称为G的生成树.生成树是连通图的极小连通子图.所谓极小是指:若在树中任意增加一条边,则将出现一个回路:若去掉一条边,将会使之变成非连通图. 生成树各边的权值总和称为生成树的权.权最小的生成树称为最小生成树. 最小生成树一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边.常用于求最小生成树得算法包括kruskal(克鲁斯卡尔)算法或Prim(