1 条题解
-
0
自动搬运
来自洛谷,原作者为

eEfiuys
你了我了,大家都了搬运于
2025-08-24 22:34:26,当前版本为作者最后更新于2021-11-10 22:19:09,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
题目:P7933
如果你会
Pascal,那么只需要加上头和尾就行了。然鹅,作为c++党,首先要将其翻译成c++语言。方式:自己理解、bdfs 等(大雾好吧,先翻译成汉语:
readln(N); //输入N counter := 0; //counter从0开始 for i := N-1 downto 1 do begin //i从N-1循环到1,一次循环开始 counter := counter + 1; //counter加1 if N mod i = 0 then break; //如果N模i等于0,那么跳出循环 end; //一次循环结束 writeln(counter); //输出counter注:以下的 指 , 指 。
翻译成
c++语言就是:#include<iostream> using namespace std; int main(){ int n,cnt=0; cin>>n; for(int i=n-1;i>=1;i--){ cnt++; if(n%i==0)break; } cout<<cnt; return 0; }可是,,显然 TLE。考虑一下,跳出循环的地方就是除 以外最大的因数。
因此,我们从 到 枚举,将范围内最小的因数记为 。如果 ,说明 为质数,结果为 。否则会在 跳出循环,结果为 。
#include<iostream> using namespace std; int main(){ int n,m; cin>>n; for(m=2;m*m<=n&&n%m;m++); if(m*m>n)cout<<n-1; else cout<<n-n/m; return 0; }
- 1
信息
- ID
- 7215
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者