1 solutions

  • 0
    @ 2025-11-5 16:08:14

    C++ :

    #include<cstdio>
    #include<iostream>
    #include<cmath>
    using namespace std;
    long long len=0,n;
    double ans,a[100000]={0};
    bool judge(long long x)
    {
    	for(int i=2;i<=sqrt(x);i++)
    	if(x%i==0) return 0;
    	return 1;
    }
    int main()
    {
    	scanf("%d",&n);
    	if(!n) 
    	{
    		cout<<0;
    		return 0;
    	}
    	ans=n;
    	if(judge(n)) 
    	{
    		ans-=1;
    		cout<<(long long)ans;
    		return 0;
    	}
    	long long j=2;
    	while(n!=1)
    	{
    		if(!(n%j)) 
    		{
    			n/=j;
    			if(a[len]!=j) a[++len]=j;
    			if(judge(n)) 
    			{
    				if(n!=j) a[++len]=n;
    				break;
    			}
    		}
    		else j++;
    	}
    	for(int i=1;i<=len;i++) ans*=(1-1/a[i]);
    	cout<<(long long)ans;
    	return 0;
    }
    
    • 1

    Information

    ID
    17508
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By