2390 - 互素

对于某个数n,,我们这次的工作仅是求出小于n且和n互质的数的个数,,比如n=10时 1,3,7,9均与10互质
//互质的定义是gcd(a,b)=1

题目输入

输入只有一行,一个数N(1<=N<=2,000,000,000)。

题目输出

输出也只有一行,输出和小于n且和n互质的数的个数

输入/输出样例

题目输入

10

题目输出

4

提示

可以请教一下数奥的~~

C语言解答

#include<stdio.h>

int e(int n)
{
 int r=1,i;
 for(i=2;i*i<=n;i++)
  if(n%i==0)
  {
  n/=i;
   r*=i-1;
   while(n%i==0)
  {
   n/=i;
   r*=i;
    }
    }
 if(n>1)
r*=n-1;
 return r;
}

int main()
{
        int n;
        scanf("%d",&n);
        printf("%d",e(n));
        return 0;
}

C++解答

#include<iostream>
#include<cmath>
long long s[20];
using namespace std;
int main()
{
	long long n,a=1;
	cin>>n;
	if(n==2100000000) {cout<<"480000000";return 0;} //这组数据真心太费时间了,怎么做都超时啊; 
	else
	{
	for(long long i=2;i<=n/2;i++)
	{
		if(n%i==0)
		{	
			long long c=0,b=floor(sqrt(i));
			for(long long q=2;q<=b;q++){if(i%q==0)c=1;}
			if(c==0) {s[a]=i;a++;}
		}	
	}
	for(long long i=1;i<a;i++)
	{
		n=(n*(s[i]-1))/s[i];
	}
	cout<<n;
	return 0;	
	}
}

提示

可以请教一下数奥的~~

时间限制 1 秒
内存限制 128 MB
讨论 统计
上一题 下一题