0729提高组3 - 数学

老师的博客:https://blog.nowcoder.net/n/f64ecade2ea446f1a200d21aa11564c1


示例1
输入
2
41 1 96 288
95 1 37 1776
输出
6
2
说明
第一组输入数据,x可以是9、18、36、72、144、288,共有6个。
第二组输入数据,x可以是48、1776,共有2个。

备注:
对于50%的数据,保证有1≤a0,b1,b0,b1≤10000且n≤100。
对于100%的数据,保证有1≤a0,b1,b0,b1≤2,000,000,000且n≤2000。


x*a0/gcd(x,a0)==a1
gcd(x,b0)==b1

#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = 45000; 
typedef pair<int,int>PII;

int prime[maxn],cnt;
bool st[maxn];

PII factor[50];
int cntf;

int divider[maxn],cntd;
void get_primes(int n)
{
    for(int i=2;i<=n;i++)
    {
        if(!st[i])prime[cnt++] = i;
        for(int j=0;prime[j] <= n/i; j++)
        {
            st[prime[j] * i] = true;
            if(i % prime[j]==0)break; 
        }
    }   
} 

int gcd(int a,int b)
{
    return b?gcd(b,a%b):a;
}

void dfs(int u,int p)
{
    if(u>cntf)
    {
        divider[cntd++] = p;
        return ;
        
    }
    
    for(int i=0;i<=factor[u].second;i++)
    {
        dfs(u+1,p);
        p *= factor[u].first;
    }
}

int main()
{
    get_primes(maxn);
    
    int t,l,k,m,n;
    int tt;
    cin>>n;

    while(n--)
    {
        int a0,b0,a1,b1;
        cin>>a0>>a1>>b0>>b1;
        
        int d = b1;
        cntf = 0;
        for(int i=0;prime[i] <= d/prime[i];i++)
        {
            int p = prime[i];
            if(d%p == 0)
            {
                int s = 0;
                while( d%p == 0) s++,d/=p;
                
                factor[++cntf] = {
                    p,s
                };
            }
        }
        
        if(d > 1 )factor[++cntf] = {
                d,1
        };
        cntd = 0;
        dfs(1,1);
        
        int res = 0;
        for(int i = 0;i < cntd; i++)
        {
            int x = divider[i];
            if(gcd(x,a0) == a1 && (ll) x * b0 / gcd(x,b0) == b1)
            {
                res++;
            }
        }
        
        cout<<res<<endl;
    }
    

    return 0;
}


备注:
对于30%的数据,有0≤k≤10;
对于50%的数据,有a=1,b=1;
对于100%的数据,有0≤k≤1,000,0≤n,m≤k,且n+m=k,0≤a,b≤1,000,000。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = 45000; 
const int mod  = 10007;

typedef pair<int,int>PII;
int pow(int a,int k)
{
    a %= mod;
    int res = 1;
    while(k)
    {
        if(k & 1)
        res = res * a %mod;
        a = a*a % mod;
        k >>= 1; 
    }
    return res;
    
}

int main()
{
    int a,b,k,n,m;
    cin>>a>>b>>k>>n>>m;
    int res = pow(a,n) * pow(b,m) %mod;
    for(int i=1,j=k;i<=n;i++,j--)
    {
        res = res * j % mod;
        res = res * pow(i,mod - 2)%mod;
    }
    cout<<res<<endl;

    return 0;
}


#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = 2010; 

int cc[maxn][maxn];
int ss[maxn][maxn];

int c(int k)
{

    for(int i=0;i<maxn;i++)
        for(int j=0;j<=i;j++)
        {
            if(!j) cc[i][j] = 1 % k;
            else cc[i][j] = (cc[i-1][j] + cc[i-1][j-1]) % k;
            
            if(!cc[i][j]) ss[i][j] = 1;
        }

    for(int i=0 ; i < maxn ; i++)
        for(int j=0 ; j < maxn ; j++)
        {
            if(i) ss[i][j] += ss[i-1][j];
            if(j) ss[i][j] += ss[i][j-1];
            if(i && j) ss[i][j] -= ss[i-1][j-1];
        }
}
int main()
{
    int t,l,k,m,n;
    int tt;
    scanf("%d%d",&t,&k);

    c(k);

    while(t--)
    {
        scanf("%d%d",&n,&m);
        
        printf("%d\n",ss[n][m]);
    }
    

    return 0;
}

说明
小凯手中有面值为3和7的金币无数个,在不找零的前提下无法准确支付价值为 1、2、4、5、8、11的物品,其中最贵的物品价值为11。
比11贵的物品都能买到,比如:
12 = 3 x 4 + 7 x 0
13 = 3 x 2 + 7 x1
14 = 3 x 0 + 7 x 2
15 = 3 x 5 + 7 x 0

备注:
对于 30% 的数据:1 ≤ a,b ≤ 50;
对于 60% 的数据: 1 ≤ a,b ≤ 10,000;
对于 100% 的数据:1 ≤ a,b ≤ 1,000,000,000。

代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
typedef long long ll;
#define maxn 100000+10 
int main()
{
    int t,l,r,m,n;
    int tt;
    scanf("%d%d",&m,&n);
        tt = m*n - ( m+n );
        printf("%I64d\n",tt);
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,074评论 0 2
  • @synthesize和@dynamic分别有什么作用?@property有两个对应的词,一个是 @synthes...
    笔笔请求阅读 487评论 0 1
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 2,011评论 0 2
  • 1. 关于诊断X线机准直器的作用,错误的是()。 (6.0 分) A. 显示照射野 B. 显示中心线 C. 屏蔽多...
    我们村我最帅阅读 9,610评论 0 5
  • 期检视日期:(7.1-7.7) 健康 检视与反思 1.睡眠:用的来说,这周睡眠还不错,保证每天6小时,无失眠现象,...
    蒙主阅读 216评论 0 1