Một số kinh nghiệm giảng dạy về tính toán đồng dư cho học sinh giỏi quốc gia môn tin học

18 145 0
Một số kinh nghiệm giảng dạy về tính toán đồng dư cho học sinh giỏi quốc gia môn tin học

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ TRƯỜNG THPT CHUYÊN LAM SƠN SÁNG KIẾN KINH NGHIỆM MỘT SỐ KINH NGHIỆM GIẢNG DẠY VỀ TÍNH TỐN ĐỒNG DƯ CHO HỌC SINH GIỎI QUỐC GIA MÔN TIN HỌC Người thực hiện: Phạm Thị Nga Chức vụ: Giáo viên SKKN thuộc lĩnh vực (mơn): Tin học THANH HỐ NĂM 2019 Mục lục Mục lục Mở đầu 1.1 Lí chọn đề tài 1.2 Mục đích nghiên cứu .4 1.3 Đối tượng nghiên cứu 1.4 Phương pháp nghiên cứu .4 1.5 Những điểm SKKN Nội dung sáng kiến kinh nghiệm 2.1 Cơ sở lí luận sáng kiến kinh nghiệm .5 2.1.1 Định nghĩa tính chất hàm nhân tính 2.1.2 Phương pháp để tính hàm nhân tính 2.1.3 Tính tốn đồng dư .7 2.1.4 Các định lí dùng tính tốn đồng dư hệ const int maxp=1000000; int p[maxp+1]; int phi[maxp+1]; .9 void calculate_phi(){ phi[1]=1; for(int i=2; i4=>F(a, n, m1)=0 n=32 a⇈n>=20 n>1 Nếu n>2 a⇈n>=20 3⇈3>=20 11 Nếu khơng n=2 tính a^a thuật toán luỹ thừa nhanh - Sau tính F(a, n, m1) F(a, n, m2) sử dụng định lí đồng dư Trung Quốc tính F(a, n, m) Có thể sử dụng cách tính nêu áp dụng thẳng công thức tổng quát Đánh giá độ phức tạp Với hàm F(a, n, m) gọi, tính O(log(a)) vì: Tối đa lần tính luỹ thừa nhanh m1 m2 tính log(a) phân tích thừa số ngun tố giá trị O(log(a)) chuẩn bị sẵn mảng số nguyên tố bé ước sàng ngun tố tính hàm phi Euler Thoạt nhìn, độ phức tạp thuật tốn O(n*log(a)) cho test hàm F(a, n, m) bị gọi tới n lần, nhiên độ phức tạp thực tế O(min(n, log(m))*log(a)) vì: Hàm F(a, n, m) gọi hàm F(a, n-1, ϕ(m2)) mà m23 nên từ lần đệ quy thứ 2, m2 chẵn m2

Ngày đăng: 31/10/2019, 14:10

Từ khóa liên quan

Mục lục

  • Người thực hiện: Phạm Thị Nga

  • const int maxp=1000000;

  • int p[maxp+1];

  • int phi[maxp+1];

  • void calculate_phi(){

  • phi[1]=1;

  • for(int i=2; i<=maxp; i++)

  • if(p[i]==0)

  • for(int j=i; j<=maxp; j+=i)

  • if(p[j]==0) p[j]=i;

  • for(int i=2; i<=maxp; i++){

  • int x=i; int t=p[i]; int k=1;

  • while(x%t==0){

  • k*=t; x/=t;

  • }

  • if(x>1) phi[i]=phi[k]*phi[x];

  • else phi[i]=i-i/p[i];

  • }

  • }

  • Mục lục

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan