bzoj 4804 欧拉心算 欧拉函数,莫比乌斯
2024-10-10 05:39:04
欧拉心算
Time Limit: 15 Sec Memory Limit: 256 MB
Submit: 408 Solved: 244
[Submit][Status][Discuss]
Description
给出一个数字N
Input
第一行为一个正整数T,表示数据组数。
接下来T行为询问,每行包含一个正整数N。
T<=5000,N<=10^7
Output
按读入顺序输出答案。
Sample Input
1
10
10
Sample Output
136
HINT
Source
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstdio> #define ll long long
#define N 10000007
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if (ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
} int n;
int cnt,pri[N],phi[N];
ll sum[N];
bool flag[N]; void init_phi()
{
phi[]=;
for (int i=;i<=;i++)
{
if (!flag[i])pri[++cnt]=i,phi[i]=i-;
for (int j=;j<=cnt&&pri[j]*i<=;j++)
{
flag[pri[j]*i]=;
if (i%pri[j]==)
{
phi[pri[j]*i]=pri[j]*phi[i];
break;
}
else phi[pri[j]*i]=phi[i]*phi[pri[j]];
}
}
for (int i=;i<=;i++)sum[i]=sum[i-]+phi[i];
}
void solve(ll n)
{
ll last,ans=;
for (int i=;i<=n;i=last+)
{
last=n/(n/i);//琛ㄧずn涓埌杈惧摢閲屼负姝㈤兘鏄痭/i鐨?
ans+=(sum[last]-sum[i-])*((sum[n/i]<<)-);
}
printf("%lld\n",ans);
}
int main()
{
init_phi();
int T=read();
while(T--)
{
n=read();
solve(n);
}
}
最新文章
- HTML 学习笔记 JavaScript (String)
- funny_python 00 The Zen of Python
- Android 使用finalBitmap实现缓存读取
- 阿里云2003服务器VPN搭建[转自阿里云官方论坛]
- Codeforces Round #263 (Div. 2) A B C
- cocos2dx2.2.2弹出框的实现
- Why am I able to change the contents of const char *ptr?
- 石子合并(四边形不等式优化dp) POJ1160
- HDOJ-ACM1020(JAVA)
- [cocos2d]调用sqlite3数据库
- MBI 跨国网络传销 金字塔诈骗 解密
- 动态规划之插头DP入门
- MySQL主从复制 + Mycat实现读写分离
- echarts入门
- json字符串转换对象的方法
- 高性能JavaScript(快速响应的用户界面)
- 知道椭圆长轴,短轴长度,ab直线的长度知道且垂直于长轴。求ab的弧长。
- location对象查询字符串参数
- [Algorithm] Tower Hopper Problem
- Oracle 截取指定长度的字符