关于素数问题中的前缀和(1)

这里我先给大家看一串代码(能直接看懂我这串代码的含义所在吗?如果可以可以直接走了,这说明你很nb了)

好了在这我会把题目给大家

include <stdio.h>
#define hhh 1000000
long long int dp[hhh+10]={0,0},v[hhh+10];
int main(){
	int i,j,k;
	for(i=2;i<=hhh;i++){
		if(!dp[i]){
			for(j=2;j*i<=hhh;j++){
				dp[i*j]=1;
			}
		}
	}                           //筛素数
	for(i=2;i<=hhh;i++){
		if(!dp[i]){
			v[i]=1; 
			for(j=2;j*i<=hhh;j++){
				v[j*i]=v[i]+v[j];
			}
		}
	}                           //计算质因子的和
	for(i=1;i<=hhh;i++){
		v[i]+=v[i-1];
	}                           //前缀和
	int T;
	scanf("%d",&T);
	while(T--){
		int a,b,number=0;
		scanf("%d%d",&a,&b);
		printf("%lld\n",v[b]-v[a-1]);
	}
}

首先根据题意每个数可以分解为多个质因数的乘积或一个质因数,然后题意中有点绕的地方就是它算了两次和。第一次和是求和是求多少个(个数)质因子相乘,第二个求和是求前缀和。

后面我会继续写一些这种类型的题目,如有错误的地方欢迎在评论指出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值