数论专题第三题:c-aladdinandtheflyingcarpet(代码片段)

1898 1898     2022-11-07     765

关键词:

可能还是太菜了,最近每写一道题都会显得十分吃力,不过令人欣慰的是还可以从中学到不少的东西。

题目的大概意思:给出面积啊a,还有最短的边b,求出能够组成矩形一共有多少个组合。
samole input:

10 2
12 2
sample output:

1       (10一共有两对因数,2,5还有1,10);

2

分析:题目的意思很明显就是要求出a的符合条件的因数的对数找出来,那么涉及到数的因数,就应该想到“算术基本定理”,而算法基本定理又要有素数作为铺垫,所以筛选素数又要用到”欧拉函数筛选法“

思路:先用“算术基本定理”算出a总体一共有多少个因数,在除以2来求对数,之后暴力求出1到b有多少限制的对数,两者相减便是答案。

注意事项:由于a给出的范围是10的12次方,所以素数筛选只需要筛选到10的6次方就可以了(m*m=a,过了m之后便会重复)。

第二个注意的地方也是题目最为关键的地方之一:代码如下:

if(a/b < b)      //意思就是当b的限制达到a的算术平方根的时候,那么将不会在存在任何一个满足题目的组合,那么就可以直接输出结果,并且continue循环执行下一个;
        
           printf("Case %d: %lld\n",i,0);
            continue;
        

总体的代码走一走:

#include<cstdio>
#include<iostream>
#include<cstring>
#define Max 1000005
#include<cmath>
using namespace std;

typedef long long int ll;
bool vis[Max];
int p[Max],p_num=0;
void ola()

    memset(vis,false,sizeof(vis));
    memset(p,0,sizeof(p));
    for(int i=2;i<Max;i++)
    
        if(!vis[i])
            p[p_num++]=i;
        for(int j=0;j<p_num;j++)
        
            if(i*p[j]>Max)
                break;
            vis[i*p[j]]=true;
            if(i%p[j]==0)
                break;
        
    


ll Ans(ll n)

    ll sum =1;
    for(int i=0;i<p_num && p[i]<=n;i++)
    
        if(n%p[i]==0)
        
            int cnt=0;
            while(n%p[i]==0)
            
                n=n/p[i];
                cnt++;
            
            sum=sum*(cnt+1);
        
    
    if(n>1)
        sum=sum*2;
    return sum;


int main()

    ola();
    int T;
    ll a,b;
    scanf("%d",&T);
    for(int i=1;i<=T;i++)
    
        scanf("%lld %lld",&a,&b);

        if(a/b < b)
        
           printf("Case %d: %lld\n",i,0);
            continue;
        
        ll cnt = Ans(a)/2;
        for(int j=1;j<b;j++)
        
            if(a%j==0)
            
                cnt--;
            
        
        printf("Case %d: %lld\n",i,cnt);
    

    return 0;

 

数论专题hdu2582

    本题题意:给出公式f(n)=gcd(3)+...+gcd(n),而gcd(n)=gcd(C(1,n),...,C(n-1,n)),求出f(n)的值。   代码如下:   #include<iostream>usingnamespacestd;typedeflonglongll;constintMax=1000000;intprime[Max+1];llsum[Max+1];vo 查看详情

数论专题hdu2674

   本题题意:求n!mod2009,范围是0-10e9。   代码如下:    #include<iostream>usingnamespacestd;constintmod=2009;typedeflonglongll;llJ[41];voidJe(){J[0]=J[1]=1;for(inti=2;i<=40;i++){J[i]=J[i-1]*i%mod;}}int 查看详情

第三题

查看详情

数论三题简单题比赛排名质因数(代码片段)

这三个题思路都不复杂,就放在一起简单题题面计算由于最终结果可能超过int的范围,因此请将运算结果对1000000007取模。一个整数T(T<=200000),表示数据组数。每行两个整数m,n。(0<m<=n<=2000)分析就是求组合数啊C(n,m)... 查看详情

数论专题hdu2197

      本题题意:求长度为n的本元串的个数,本元串就是无法由几个相同的子串拼接的01串。    代码如下:    #include<iostream>usingnamespacestd;typedeflonglongll;constintmod=2008;llpow_(lla,llb,llmod){llsum=1;while(b){if(b&1){sum=s... 查看详情

数论专题hdu2104

    本题题意:有N个人,一个人从1开始走,每次间隔M-1个人,问他是否能走到所有的点,并回到原点。   代码如下:    #include<cstdio>usingnamespacestd;intgcd(inta,intb){intr;while(b){r=a%b;a=b;b=r;}returna;}intmain(){intm,n;while(~sc... 查看详情

数论专题hdu2669

    本题题意:关于式子aX+bY=1,给出a、b,求X,Y(X为最小非负整数)。  代码如下:  #include<iostream>usingnamespacestd;typedeflonglongll;llexgcd(lla,llb,ll&x,ll&y,ll&d){if(!b){x=1;y=0;d=a;}else{exgcd(b,a%b,y,x,d);y 查看详情

数论专题poj1061

  本题题意:两只青蛙,一只从x开始跳,每次跳m格,一只从y开始跳,每次跳n格,地球的线长为L米,问两蛙是否可能相遇,以及相遇的时刻。代码如下:#include<iostream>usingnamespacestd;typedeflonglongll;llexgcd(lla,llb,ll&x,ll&y,ll&a... 查看详情

2019年9月14日(数论专题考试)

汗~,差点爆零(QwQ)……(prob2:saber)(upd):题意以后都不写了,反正写了日期,去文件里找。题目数学?可惜我开始跑的是暴力……思路肯定是总方案减去不合法方案,那么就有两种主流思路:暴力30分,因为不合法情况是且仅是要... 查看详情

kuangbin数论专题记录

A:每个学生所得的bamboo的score的值必须大于或等于他的幸运数字,bamboo的score值就是其长度x的欧拉函数值(即小于x且与x互质的数的个数)每单位长度花费1Xukha,求买这些bamboo的最小花费。此题关键:素数(x)的欧拉函数值(x-1... 查看详情

uestc电子科大专题训练数论e

UESTC1716题意:中文题思路:先把男生排列,由于是圆桌,所以每个位置都是一样的,排列方案为A(n,n)/n,再对女生排列,由于男生已经在座位上了,所以此时每个座位是不一样的,方案数为A(n,n)AC代码:#include"iostream"#include"string.h... 查看详情

可信考试第三题-20220722

/**Copyright(c)HuaweiTechnologiesCo.,Ltd.2019-2020.Allrightsreserved.*Description:上机编程认证*Note:缺省代码仅供参考,可自行决定使用、修改或删除*只能importGo标准库 查看详情

第三题(非实验5)

#ifndefBOOK_H#defineBOOK_H#include<string>usingstd::string;classBook public: Book(stringisbnX,stringtitleX,floatpriceX):isbn(isbnX),title(titleX),price(priceX) voidprint(); private: string 查看详情

c_cpp第三题(代码片段)

查看详情

数论与数学专题练习(201802~201805)

...n.net/suncongbo/article/details/79357927上次打cf的时候一道水水的数论题(强推式子)都没有做出来,于是决定开始数论专题练习。以后将不断进行update.刷题记录UPD1.T1.(20180214)ACcodeforces933Bhttp://codeforces.com/problemset/problem/933/B题解:略UPD2.T2.(201... 查看详情

uestc电子科大专题训练数论g

UESTC1718题意:在01串中选出长度为偶数,并且前一半是0,后一半是1的子序列方案数思路:组合数+范德蒙恒等式记录每个数前面0的个数pi和后面1的个数nexi(包括本身)遍历到第k个数的时候,如果是0那么方案数为(因为计算第i... 查看详情

uestc电子科大专题训练数论l

UESTC1723题意:中文题思路:预处理,dp[i][j]表示将j个人放到i个房间里,则可以得到dp[i][j]=dp[i][j-1]*i+dp[i-1][j-1],递推式的理解,第一:当有i个房间,j-1个人的时候方案数已知为dp[i][j-1],则当增加一个人的时候,第j个人可以选择i... 查看详情

java实验九第三题

答案我也是嫖的!https://blog.csdn.net/qq_37246345/article/details/1032650371importjava.io.BufferedReader;2importjava.io.BufferedWriter;3importjava.io.File;4importjava.io.FileInputStream;5importjava.io.FileWri 查看详情