Mathematically Hard(小于n且与n互质的数的个数==欧拉函数,欧拉表)

Mathematically Hard(小于n且与n互质的数的个数==欧拉函数,欧拉表)
Mathematically Hard(小于n且与n互质的数的个数==欧拉函数,欧拉表)
题意
先说值吧,函数是求n之前的数与n互质的数的个数,术语:欧拉值。欧拉公式上图也给出来了。那么这道题求的是区间[a,b] 的欧拉值的平方之和。

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
typedef unsigned long long ll;
//数据很大,unsigned不能少。 
//unsigned 的数据范围 2^63 ;输出用llu
const int N=5000010;
ll s[N];
int t,cnt;
void init()
{
	for(int i=0;i<N;i++)
		s[i]=i;
	for(int i=2;i<N;i++)
	{
		if(s[i]==i){
			for(int j=i;j<N;j+=i)
				s[j]=s[j]/i*(i-1);
		}
	}
	for(int i=2;i<N;i++)
		s[i]=s[i]*s[i]+s[i-1];
}
int main()
{
	init();
	scanf("%d",&t);
	cnt=1;
	while(t--)
	{
		ll n,m;
		scanf("%lld%lld",&n,&m);
		printf("Case %d: ",cnt++);
		cout<<s[m]-s[n-1]<<endl;//输出对应 unsigned. 
	}
}
上一篇:LeetCode hard 面试题 17.19.消失的两个数


下一篇:AT1983 [AGC001E] BBQ Hard(组合计数)