首页 > 其他分享 >骏码杯I题:最大公约数求和

骏码杯I题:最大公约数求和

时间:2023-03-27 11:56:08浏览次数:38  
标签:typedef 求和 LL ret int 最大公约数 骏码 mod define

 

 

题解在代码里,如下

点击查看代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int,int> PLL;
#define IOS cin.tie(nullptr)->sync_with_stdio(false);
#define se second
#define fi first
#define mem(a,b) memset(a,b,sizeof a);
#define pri priority_queue<int,vector<int>,greater<int> >
#define low(a,b,c) lower_bound(a,a+b,c)-a;
#define upp(a,b,c) upper_bound(a,a+b,c)-a;
const int N=2e7+7;
const LL mod=1e9+7;
bool st[N];
int p[N],tot;
LL x[N],y[N];
LL n,k;

/*
   积性函数 ;f(ab)=f(a)f(b) (可以参考质数筛) 
*/
LL pow_mod(LL a,LL b){
	LL ret=1;
	LL p=mod;
	while(b){
		if((b&1)) ret=(ret*a)%p; 
		a=(a*a)%p;
		b>>=1;
	}
	return ret;
}
void solve()
{
	cin>>n>>k;
	x[1]=y[1]=1;
	LL ans=1;
	for(int i=2;i<=n;i++)
	{
		if(!st[i]) //这里判断是否被标记过 
		{
			p[tot++]=i; //刚入队列 
			y[i]=pow_mod(i,k%(mod-1); //欧拉降幂 
			x[i]=__gcd(1LL*i,k); 
		}
		for(int j=0;i*p[j]<=n&&j<tot;j++)//枚举 
		{
			st[p[j]*i]=true; //标记 
			y[i*p[j]]=(y[i]*y[p[j]])%mod; //满足积性函数 
			
			if(i%p[j]==0) //减枝	 p[j] 为 i的质因数  记为w 
			{
				if((k/x[i])%p[j]==0) x[i*p[j]]=(x[i]*p[j])%mod;//这里的意思是 K%2w==0 ,既2w为k的因数; 
				else x[i*p[j]]=x[i]; //否则 k只包含一个w 只需要等价于 x[i] 就行  
				break;
			}
			x[i*p[j]]=x[p[j]]*x[i]; //这里 i和p[j] 一定没有大于1的公因数 ,直接利用积性函数性质即刻 
			
		}
		ans=(ans+x[i]*y[i])%mod;
	}
	cout<<ans<<"\n";
}
int main()
{
	int t=1;
	while(t--)
	{
		solve();
	}
	return 0;
}

标签:typedef,求和,LL,ret,int,最大公约数,骏码,mod,define
From: https://www.cnblogs.com/xxj112/p/17261072.html

相关文章

  • 中国石油大学(北京)第三届“骏码杯”程序设计竞赛(同步赛)
    Preface前两天刚买了个U盘,然后今天又水了一个(乐做完签到感觉F很一眼,结果一个特判重复出现两次的地方写挂了,苦苦白调一个小时(甚至被迫在ACM比赛里写对拍)然后赶紧把本质很......
  • 阶乘求和 0!+1!+2!+3!+4!+5!+... O(n) 复杂度
    n次循环以n=4为例利用n!+(n-1)!=(n+1)x(n-1)! 4!+3!+2!+1!+0!=(4+1)x3!+2!+1!+0!=((4+1)x3+1)x2!+1!+0!=(((4+1)x3......
  • 求和比较(第十二届 省赛 T4)
     题目 那么先把A1,A2所组成的等式列出来: 解出A1:       之后,我们可以发现问题变成了求1~n之间任意和为A1的可能性——01背包。顺便看一眼,要用long......
  • 中国石油大学(北京)第三届“骏码杯”程序设计竞赛题解
    中国石油大学(北京)第三届“骏码杯”程序设计竞赛题解感谢大家的参与,我是本次比赛所有$10$道题目的出题人,在接下来的题解中,所有C++与Python的标程均由我本人编写,因为我......
  • Vue.js Vuex实现求和案例
    视频Vuex版本componentsCount.vue<template> <div> <!--模板里能看见vc上所有东西--> <h1>当前求和为:{{$store.state.sum}}</h1> <selectv-model.number="n......
  • Vue.js 纯Vue实现求和案例
    纯Vue实现视频106纯Vue版本componentsCount.vue<template> <div> <h1>当前求和为:{{sum}}</h1> <selectv-model.number="n"> <!--收集到的是字符串类型,v-mo......
  • 最大公约数&最小公倍数
    最大公约数算法:要求a,b的最大公约数记作gcd(a,b),(假设a>b)我们就让a=a%b,如果a变为0那么b就为最大公约数,否则交换a,b继续执行上述操作直到求出最大公约数intgcd(......
  • 简单的数列求和
    这道题并没有很难,但是题目会把你吓住。是吧是吧,确实不难吧,但是还是请大家陪我一起动动脑瓜。我在写的时候,首先先把题目中需要用到的等差数列找出来了接着再用高中学的数......
  • C语言_求最大公约数和最小公倍数
    #include<stdio.h>intmain(){ intn1,n2,x,y,temp;printf("请输入两个数用空格隔开:\n"); scanf("%d%d",&n1,&n2); x=n1>n2?n1:n2;//保存较大数 y=n1+n2-x; ......
  • 最大公约数,最小公倍数(for循环嵌套)
    题目:输入两个正整数m和n,求其最大公约数和最小公倍数。  publicstaticvoid第六题(){intm=input.nextInt();......