HDU 3501 Calculation 2
- Problem Description
Given a positive integer N, your task is to calculate the sum of the positive integers less than N which are not coprime to N. A is said to be coprime to B if A, B share no common positive divisors except 1.
Input
For each test case, there is a line containing a positive integer N(1 ≤ N ≤ 1000000000). A line containing a single 0 follows the last test case.Ouput
For each test case, you should print the sum module 1000000007 in a line.Sample Input
3 4 0Sample Output
0 2题解
欧拉公式的引伸:小于或等于n的数中,与n互质的数的总和为:φ(x) * x / 2。(n>1) 所以:res = n*(n-1)/2-n - phi[x]*x/2- 代码如下:
#include <iostream>
using namespace std;
typedef long long ll;
const int mod=1000000007;
int euler1(int n)
{
int rea=n,sum=0;
for(int i=2; i*i<=n; i++)
if(n%i==0)
{
rea=rea-rea/i;
do
n/=i;
while(n%i==0);
}
if(n>1)
rea=rea-rea/n;
return rea;
}
int main()
{
ll n;
while(cin>>n,n){
ll s=(ll(n*(n-1)/2)%mod-ll(n*euler1(n)/2)%mod+mod)%mod;
cout<<s<<endl;
}
return 0;
}
本文介绍HDU3501 Calculation2题目,该题要求计算小于N且与N不互质的正整数之和。通过使用欧拉公式推导出解决方案,并给出具体实现代码。
11万+

被折叠的 条评论
为什么被折叠?



