1 条题解

  • 0
    @ 2024-12-24 9:59:30

    C :

    #include<stdio.h>
    
    int eular(int n)
    {
    	int ret=1,i;
    	for(i=2;i*i<=n;i++)
    		if(n%i==0)
    		{
    			n/=i;
    			ret*=i-1;
    			while(n%i==0)
    			{
    				n/=i;
    				ret*=i;
    			}
    		}
    	if(n>1)
    		ret*=n-1;
    	return ret;
    }
    
    int main()
    {
    	int n;
    	while(scanf("%d",&n)!=EOF,n)
    		printf("%d\n",eular(n));
    	return 0;
    }
    

    C++ :

    #include<stdio.h>
    
    int eular(int n)
    {
    	int ret=1,i;
    	for(i=2;i*i<=n;i++)
    		if(n%i==0)
    		{
    			n/=i;
    			ret*=i-1;
    			while(n%i==0)
    			{
    				n/=i;
    				ret*=i;
    			}
    		}
    	if(n>1)
    		ret*=n-1;
    	return ret;
    }
    
    int main()
    {
    	int n;
    	while(scanf("%d",&n)!=EOF,n)
    		printf("%d\n",eular(n));
    	return 0;
    }
    

    Java :

    import java.util.Scanner;   
    public class Main {   
     
    static int eular(int n)
    {
        int ret = 1,i;
        for (i = 2;i * i <= n;i++)
            if (n % i == 0)
            {
                n /= i;
                ret *= (i - 1);
                while (n % i == 0)
                {
                    n /= i;
                    ret *= i;
                }
            }
        if (n > 1)
            ret *= (n - 1);
        return ret;
    }
    
    
     public static void main(String[] args) {   
        Scanner sc = new Scanner(System.in);   
       
        while(sc.hasNext()){
         int n=sc.nextInt();
         if(n==0) break;
         System.out.println(eular(n));
       }
      }
    }  
    
    • 1

    信息

    ID
    1650
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者