题目描述
数学课上,小学生刚学会了乘除法。老师问了他们一系列这样的问题:给一个正整数N,答案要为小于N的正整数,
比如N = 4,
老师会问:1乘以几除以4余1?
小学生回答:1!
老师继续问:2乘以几除以4余1?
小学生回答:没有!
老师继续问:3乘以几除以4余1?
小学生回答:3!
LJ是众小学生之一,他觉得这个问题太简单了,于是就想,对于一个N,如果老师从1 问到 N-1(乘以几除以N余1 ),那么所有答案的和是多少,如果答案是”没有”则认为答案是0。
输入格式
一个整数 T,表示数据组数
之后的T行,每行一个整数N
输出格式
共T行,每行一个整数,表示和
样例
样例输入
1
4
样例输出
4
数据范围与提示
2 <= N <= 1000000000,T <= 10
来源
MT杯放假欢乐赛
不欢乐。。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
long long n;
long long phi(){
long long pre=n;
long long ans=n;
for(int i=2;i<=sqrt(n);i++){
if(n%i==0){
ans=ans/i*(i-1);
while(n%i==0)n=n/i;
}
}
if(n>1)ans=ans/n*(n-1);
return ans*pre/2;
}
int main()
{
int t;cin>>t;
while(t--){
cin>>n;
cout<<phi()<<endl;
}
return 0;
}