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