1 条题解

  • 0
    @ 2025-4-7 21:41:57

    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;
    }
    

    Pascal :

    var a:array[1..15]of longint;n,m,i:longint;s:double;
    function su(a:longint):boolean;
    var i:longint;
    begin
     su:=true;
     if a=1 then su:=false;
     if a<>2 then
     for i:=2 to trunc(sqrt(a)) do
      if a mod i=0 then begin su:=false;break end
    end;
    begin
     readln(n);
     while n<>0 do
      begin
       s:=n;
       m:=0;
       i:=1;
       while (i<n)and(not(su(n))) do
        begin
         i:=i+1;
         if (n mod i=0)and(su(i)) then begin m:=m+1;a[m]:=i;while n mod i=0 do n:=n div i end
        end;
       if su(n)then begin m:=m+1;a[m]:=n end;
       for i:=1 to m do
        s:=s*(1-1/a[i]);
       writeln(round(s));
       readln(n)
      end
    end.
    

    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
    2089
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者